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

AtCoder ABC402 A~D 题解

A - CBC

题目大意

给点字符串 S S S,输出其中所有大写字母。

思路

根据题意模拟即可。

代码

#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;int main()
{string s;cin >> s;for (int i = 0; i < s.size(); i++)if ('A' <= s[i] && s[i] <= 'Z')cout << s[i];return 0;
}

B - Restaurant Queue

题目大意

一些人排队,初始队列为空, Q Q Q 次操作,每一次新增一个人或者输出队列第一个人的数字并移除。

思路

显然可以使用 std::queue,根据题意模拟即可。

代码

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;queue<int> q;
int Q;int main()
{cin >> Q;while (Q--){int op;cin >> op;if (op == 1){int x;cin >> x;q.push(x);}else{cout << q.front() << endl;q.pop();}}return 0;
}

C - Dislike Foods

题目大意

N N N 种原料和 M M M 种 食物,第 i i i 种食物由 K i K_i Ki 种原料组成,分别是 A i , 1 , A i , 2 , … , A i , K i A_{i, 1},A_{i,2},\dots, A_{i,K_i} Ai,1,Ai,2,,Ai,Ki。刚开始,Snuke 不喜欢任何原料。第 i i i 天,他接受了第 B i B_i Bi 种原料,且只能吃仅由 B 1 , B 2 , … , B i B_1,B_2,\dots, B_i B1,B2,,Bi 组成的食物。问每一天他能吃多少个食物。

思路

发现数据范围很大,而且 i − 1 i-1 i1 天 Snuke 能吃的食物在第 i i i 天的时候也可以吃。这个单调性起到了至关重要的作用,我们不必重复枚举,每一次只需要考虑包含 B i B_i Bi 的食物能否使用即可。可以使用数组维护每一种食物的原料有多少个可以吃,当原料个数与数组值相等的时候,这个食物可以食用。

代码

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
using namespace std;int n, m, ans;
vector<int> a[300010];
vector<int> v[300010];
int b[300010];
int k[300010];
int c[300010];int main()
{cin >> n >> m;for (int i = 1; i <= m; i++){cin >> k[i];a[i].push_back(0);for (int j = 1; j <= k[i]; j++){int aa; cin >> aa;a[i].push_back(aa);v[aa].push_back(i);}sort(a[i].begin(), a[i].end());}for (int i = 1; i <= n; i++)cin >> b[i];for (int i = 1; i <= n; i++){for (int j = 0; j < v[b[i]].size(); j++){c[v[b[i]][j]]++;if (c[v[b[i]][j]] == k[v[b[i]][j]])ans++;}cout << ans << endl;}return 0;
}

D - Line Crossing

题目大意

N N N 个点均匀分布在圆周上,它们之间连了 M M M 条线,求这 M M M 条线中有多少对是交叉的。

思路

直接求交叉不容易,我们不妨先求出来平行的有多少对,再用总对数减去求出答案。观察题中的图片可以发现,部分平行线 A B AB AB C D CD CD 满足 A + B = C + D A+B=C+D A+B=C+D,而另外一种情况是由循环问题导致的。在 8 8 8 个点的时候,两端分别是 1 1 1 2 2 2 的直线与两端分别是 4 , 7 4,7 4,7 的直线平行。所以,我们将等式完善一下: A + B A+B A+B N N N 取模的结果等于 C + D C+D C+D N N N 取模的结果。

代码

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;int n, m;
int cnt[2000010];struct node
{int a, b;
} ;node p[300010];int main()
{cin >> n >> m;for (int i = 1; i <= m; i++){cin >> p[i].a >> p[i].b;cnt[(p[i].a + p[i].b) % n]++;}long long ans = 1LL * m * (m - 1);for (int i = 0; i < n; i++)ans -= 1LL * cnt[i] * (cnt[i] - 1);ans /= 2;cout << ans << endl;return 0;
}

相关文章:

  • 五分钟学会如何基本使用JJWT!!!
  • Linux系统编程 day6 进程间通信mmap
  • 借助LlamaIndex实现简单Agent
  • Day2—3:前端项目uniapp壁纸实战
  • 深入理解 MCP 协议:开启 AI 交互新时代
  • 【人工智能】再谈探索AI幻觉及其解决方案(进一步整理)
  • 信创开发:开启信息自主创新、国产替代新时代
  • [Java微服务组件]注册中心P3-Nacos中的设计模式1-观察者模式
  • mysql控制单表数据存储及单实例表创建
  • 生物化学笔记:医学免疫学原理23 免疫检查点分子与肿瘤免疫治疗(PD-1抑制剂黑色素瘤)
  • 【进程信号】五、信号集操作接口详解
  • SICAR标准功能块 FB1514 “Robot_request_FB”
  • 增量式PID基础解析与代码实例:温控系统
  • 有效的完全平方数--LeetCode
  • HFSS3(limy)——建模学习记录
  • 工业级MIFI解决方案:打造低时延、高可靠性的Wi-Fi网络快速部署体系!
  • 【专刷】滑动窗口(一)
  • 字符串系列一>二进制求和
  • HTML5+CSS3小实例:CSS立方体
  • 在RK3588上使用哪个流媒体服务器合适
  • 圆桌|耐心资本对科技创新有何意义?天使投资最关注哪些要素?
  • 明查|美军“杜鲁门”号航空母舰遭胡塞武装打击已退役?
  • 秦洪看盘|A股缩量窄幅震荡,短线或延续有韧性、无弹性走势
  • 卡洛·金茨堡:女巫与萨满——我的学术之路
  • 马克龙:美乌欧在法磋商乌克兰问题“积极且有建设性”
  • 经济日报经世言:不断开创中马关系发展新局面