AtCoder Beginner Contest 148
第一次打abc,记录一下
Task Name | Time Limit | Memory Limit | |
---|---|---|---|
A | Round One | 2 sec | 1024 MB |
B | Strings with the Same Length | 2 sec | 1024 MB |
C | Snack | 2 sec | 1024 MB |
D | Brick Break | 2 sec | 1024 MB |
E | Double Factorial | 2 sec | 1024 MB |
F | Playing Tag on Tree | 2 sec | 1024 MB |
6/6,rank 182 Rating 859 + 355 = 1214
确实跟cfdiv3差不多
A
输入123中两个数,输出另外一个数
\[res = 6 - x - y
\]
B
输入两个串,交叉输出
C
求AB的lcm
\[res = a / gcd(a,b) *b
\]
D
给一个序列,求删除一些数,使得剩余的序列是\(1\to k\)的形式
求最长上升连续子序列
\(dp[i]\)表示\(1\to i\)有没有出现过,扫一遍整个序列
for (int i = 1; i <= n; ++i) {
if (dp[a[i] - 1]) dp[a[i]] = 1;
}
取最大的\(i\)满足\(dp[i]=1\)即是保留的序列
E
定义隔项阶乘函数:
\[f(n) = 1 (n < 2) \\f(n) = n * f(n - 2) (else)
\]
求\(f(n)\)末尾0的个数
分奇偶讨论即可
若\(n\)为奇数,显然\(f(n)=1×3×5×\dots×n\)
没有2因子,不会出现末尾0输出0
若\(n\)为偶数,显然\(f(n)=2×4×6×8×10×\dots×n\)
2因子数量总是大于5因子,相当于求\(1\to n/2\)中5因子的数量
F
给一棵树,x和y博弈,首先x在u点,y在v点,游戏结束条件是x和y重合,x先动,x希望游戏更晚结束,y希望游戏更早结束,求y在游戏结束前走的步数
设游戏在p点结束,那么\(dist(p,u) \le dist(p,v)\)显然成立,当这个条件满足时可以观察出必然可以走到这个点(树上两个点的距离固定而且路径固定),所以是个充要条件。
由于x先动要求答案尽量大,所以取满足条件的\(max(dist(p,v))\)即可。