当前位置: 首页 > news >正文

2024ICPC网络赛第一场

A

最终答案与中国队能力值的排名有关,具体每个情况手推一下,用 if else 即可通过。

#include <bits/stdc++.h>
using namespace std;int main() {ios::sync_with_stdio(false); cin.tie(0);int t, a[40];cin >> t;while (t--) {int num = 0;for (int i = 1; i <= 32; i++) {cin >> a[i];if (a[i] <= a[0]) num++;}if (num == 32) puts("1");else if (num >= 28) puts("2");else if (num >= 14) puts("4");else if (num >= 7) puts("8");else if (num >= 3) puts("16");else puts("32");}return 0;
}

F

每一个数都能更新左右比它小的数,直到遇到一个大于等于它的数为止。从小到大一个个更新,更新次数一定最多,但在计算结果的时候只需要计算数量,不用考虑计算顺序。

利用单调栈求出每一个 a_i 左边第一个大于等于它的数的位置 lef_i 和右边第一个大于等于它的数的位置 rig_i

计算结果的时候要注意,如果 a_i = a_{lef_i},即 a_i 与左边第一个大于等于它的数相等的时候,只需要记右边小于它的数的个数,不然会跟前面的算重;其余情况都要加上左右小于它的数的个数。

#include <bits/stdc++.h>
using namespace std;const int N = 2e5 + 10;
int n, a[N], lef[N], rig[N];
stack<int> s;inline int read() {int x = 0, f = 1; char c = getchar();while (c < '0' || c > '9') { if (c == '-') f = -1; c = getchar(); }while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();return x * f;
}int main () {int t = read();while (t--) {n = read();for (int i = 1; i <= n; i++) a[i] = read();for (int i = 1; i <= n; i++) {if (s.empty() || a[i] < a[s.top()]) s.push(i);else {while (!s.empty() && a[i] >= a[s.top()]) {rig[s.top()] = i;s.pop();}s.push(i);}}while (!s.empty()) rig[s.top()] = n + 1, s.pop();for (int i = n; i; i--) {if (s.empty() || a[i] < a[s.top()]) s.push(i);else {while (!s.empty() && a[i] >= a[s.top()]) {lef[s.top()] = i;s.pop();}s.push(i);}}while (!s.empty()) lef[s.top()] = 0, s.pop();long long ans = 0LL;for (int i = 1; i <= n; i++) {if (!lef[i] || a[lef[i]] != a[i]) ans += rig[i] - lef[i] - 2;else ans += rig[i] - i - 1;}printf("%lld\n", ans);}return 0;
}

M

#include <bits/stdc++.h>
using namespace std;int main() {ios::sync_with_stdio(false); cin.tie(0);int t, n;string team, status;char prob;cin >> t;while (t--) {cin >> n;set<string> st[30];for (int i = 1; i <= n; i++) {cin >> team >> prob >> status;if (status == "accepted") st[prob - 'A'].insert(team);}int idx = 0;for (int i = 1; i <= 'Z' - 'A'; i++) {if (st[idx].size() < st[i].size()) idx = i;}printf("%c\n", 'A' + idx);}return 0;
}


http://www.mrgr.cn/news/27817.html

相关文章:

  • 删库跑路,启动!
  • PyAEDT:Ansys Electronics Desktop API 简介
  • see的本质是什么?
  • Timeline动画「硬切」的问题
  • 应用jar包使用skywalking8(Tongweb7嵌入式p11版本 by lqw)
  • 分布式光伏智慧平台建设现场 系统集成商如何盈利
  • 蒸!--数据在内存中的存储
  • 408算法题leetcode--第五天
  • Cubieboard2(五) 安装无线网卡驱动
  • 软考中级网络工程师——第十二章
  • asio中的handler
  • 基于ssm+vue+uniapp的智能停车场管理系统小程序
  • 【数据结构与算法 | 每日一题 | 力扣篇】力扣1184
  • 滚雪球学SpringCloud[3.3讲]:Resilience4j:现代化的容错处理详解
  • Java 入门指南:JVM(Java虚拟机)—— 双亲委派模型(Parent Delegation Model)
  • Redis基础数据结构之 quicklist 和 listpack 源码解读
  • 请求响应-05.请求-日期参数JSON参数
  • 3286、穿越网格图的安全路径
  • node express 开启多进程
  • C/C++内存管理
  • Sprie for .net8.0填报项目验收材料
  • (批处理)设置延时+设置关机倒计时
  • 【Linux】多路转接epoll
  • 【智路】智路OS air-edge 开发者手册 功能概述
  • 人脸防伪检测系统源码分享
  • USB组合设备——串口+鼠标+键盘