可达鸭2023国庆CSP-J复赛集训第4天补题报告
-
1 复读机
-
赛中分数
100
分 -
赛中概况
花1小时写了个正解, 然后老师说有一种奇特的写法, 我当时猜了个
regex
, 还真的猜对了… -
题目意思
遍历给定的字符串
s
, 遇到字母就放进字符串ans
, 遇到数字就让x *= 10
, 然后x += [这个数字]
, 在下一次遇到字母时就ans = ans * x
(这个操作并不是C++包含的
,Python
可以使用这个操作, 这里的意思是把ans
复读x
遍, 然后把复读后的结果赋值给ans
). -
题目思路
模拟.
-
AC代码
#include <iostream> using namespace std; int main() { int t; cin >> t; while (t--) { int n; string s; cin >> n >> s; int x = 0; bool flag = true; string tmp,ans; for (int i = 0;i < n;i++) { if (s[i] >= 'a' && s[i] <= 'z') { if (!flag) { for (int i = 1;i <= x;i++) { tmp += ans; } x = 0; ans = tmp; tmp = ""; flag = true; } ans += s[i]; } else { if (flag) { x = 0; flag = false; } x *= 10; x += s[i] - '0'; } } x--; if (x >= 1) { tmp = ans; for (int i = 1;i <= x;i++) { tmp += ans; } ans = tmp; } cout << ans << '\n'; } return 0; }
-
-
2 小可的矛与盾
-
赛中分数
70
分 -
赛中概况
没开
long long
, 开了能拿90
分,minn
特殊处理后100
分. -
题目意思
求一个
pos
, 让1 ~ pos
的矛攻击力总和与pos + 1 ~ n
的盾防御力总和之差的绝对值最小. -
题目思路
前缀和 + 枚举, 注意求
minn
时minn
初始值为max(sum1[n],sum2[n])
, 因为这是最极限的情况, 如果minn
初始值设为1e18
等值, 最后一个for
循环范围应该是0 ~ n + 1
. -
AC代码
-