AtCoder Beginner Contest 369 Review
0. 闲话
这是我人生中第一次 AK ABC。(虽然它出原题就是了)
以下请欣赏沉浸式体验。
1. \(369\)
好好好,名字是等差数列你就真出等差数列啊。
两边一定可行,中间间隔偶数就可以插进去,非常简单。用时 \(1\) 分 \(50\) 秒。
2. Piano \(3\)
三回啊三回
看到题目,首先就把操作序列重排使得 fatigue value 最小。但它没叫我重拍。笑。
重新打一遍模拟,同样非常简单。
用时 \(6\) 分 \(18\) 秒。
3. Count Arithmetic Subarrays
计算等差区间数?T3?哦,原来双指针贪心检查就行了。非常简单。
用时 \(14\) 分 \(33\) 秒。
4. Bonus EXP
碰到这种题目直接设计 DP 状态,每个位置设两个值分别表示这个位置是奇数位和偶数位的最大经验值,转移非常 trivial。
用时 \(18\) 分 \(19\) 秒。
5. Gather Coins
你猜我为什么先写 F。
矩阵很大,直接存储不可行,但是我们可以给金币位置排序然后用树状数组找最长偏序。学过树状数组的人应该都会这个 trick(吧)。
用时 \(34\) 分 \(41\) 秒。
6. Sightseeing Tour
一看以为需要什么非常高深的算法,再仔细一看,\(1\le N\le 400\),\(1\le Q\le 3\times 10^3\),\(1\le K_i\le 5\),果断 Floyd+阶乘算法暴力枚举所有方案。
时间复杂度 \(O(N^3+\sum_{i=1}^Q 2^{K_i} K_i!)\)。
第一发,CE。为什么?信息:
./Main.cpp:11:5: error: implicit instantiation of undefined template 'std::tuple<int, int, int>'
t3i edge[N];
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_pair.h:90:11: note: template is declared here
class tuple;
^
1 error generated.
哦,没有 include tuple 库啊,include 一下。
第二发,WA。为什么?发现编译信息:
./Main.cpp:6:25: warning: unused variable 'M' [-Wunused-const-variable]
const int N = 4e2 + 10, M = 2e5 + 10;
^
1 warning generated.
绷,定义两个 const,第二个没用。
再交一发,过。
用时 \(68\) 分 \(49\) 秒。
7. As far as possible
看完这道题后,我拿着我的暑假集训题单陷入了沉思。
我超,原!
直接长链剖分然后排序后一个个选就行了。
过。
用时 \(80\) 分 \(7\) 秒。
至此,ABC369,AK。
结语
在我快要回归文化课时发生了这两件事,真够戏剧性的啊。