2020 ICPC Asia East Continent Final¶
排名 | 当场过题数 | 至今过题数 | 总题数 |
---|---|---|---|
40/470 | 7 | 9 | 13 |
A¶
solved by JLK
题意¶
给一个由大小写字母和数字组成的字符串,求满足本质上和\(namomo\)相同的子序列个数。(也就是长度为6,由四个不同字符组成,第三个和第五个相同,第四个和第六个相同)
\(1 \le n \le 10^6\)
题解¶
字符集大小是\(w=62\),一种比较暴力的做法是枚举第三个和第四个字符,每次扫一遍计算。
要通过本题肯定要优化到\(O(nw)\)。
设第三第五个字符为\(a\),第四第六为\(b\)。
从后往前扫,每次令当前的字符为\(a\),然后在扫的过程中处理一下对于每个\(a\),每个\(b\)的\(cnt_b\)及其平方。这样每次对于一个当前的\(a\),枚举\(b\),就可以算出后四个字符的方案数。而现在也知道了\(a\)和\(b\),就知道前两个能取哪些,可以\(O(1)\)算出前两个的方案。
这样就是\(O(nw)\)。
B¶
solved by JLK
题意¶
一个\(n \times m\)的矩阵,每秒消失一个方块,问每秒还存在的方块构成多少矩形。(也就是矩形内部不能有空方块的个数)
\(1 \le n,m \le 500\)
题解¶
把每个方块的消失时间看做权值。问题等价于求每个时刻消失多少矩形。一个矩形的消失时间就是里面所有方块的权值最小值。
枚举两行,扫列,每一列的权值就是这一列在两行之间的方块权值最小值。
计算每一列作为最小值的贡献。用单调栈找到左边右边第一个比它小的即可。
\(O(n^2m)\)
C¶
solved by YZW
题意¶
题解¶
D¶
solved by JLK
题意¶
一个无向图,初始边权为1,有\(k\)单位的钱,每次可以花费1单位的钱来使一条边权为\(\frac 1a\)的边变为\(\frac 1{a+1}\)。有两个人要从各自起点走到各自终点,求最小的两人经过边权之和。
\(1 \le n \le 5000, 0 \le m \le 5000,0 \le k \le 10^9\)
题解¶
显然两人最终走的路径如果相交,那么一定是一段连续区间。
由于\(n\)不大,可以枚举相交路径的起点的终点。预处理出每两个点的距离。
这样对于每个情况,可以得到一个二元组\((a,b)\),表示在这种方案下,一个人走的路有\(a\)条,两个人走的路有\(b\)条。(简单把几个距离相加肯定会有偏大的情况,但是这里面一定能找到最优方案)
还有一个性质就是,边权一定是在\(a\),\(b\)的所有边里分别均分。
还有一个性质就是,\(b\)相同的情况下,\(a\)肯定越小越好,那么只保留最小的情况。
这样总共只有\(O(n)\)个方案需要计算,可以暴力一点,推一下式子然后直接二分套二分求出给\(a,b\)分别的边权,然后调整一下。
推式子指的是,可以比较硬币当前给\(a\)或者给\(b\)的边权差值,这样可以求出对于某个给\(a\)的分配,\(b\)最多分多少是比给\(a\)优的。先二分给\(a\)的,再二分给\(b\)的即可。后者是求出最多给\(b\)多少,前者是要求比\(k\)小的最大\(a\)。
\(O(n^2+n\log^2n)\)
E¶
upsolved by
题意¶
题解¶
F¶
solved by TYB
题意¶
签到。
题解¶
略。
G¶
upsolved by TYB
题意¶
给出长度为\(n\)的序列\(a\),\(m\)次询问,每次给出\(L,R\),求满足\(L\le l\le r\le R\)且\(a_l,a_{l+1},\dots,a_r\)中不同数的个数为奇数的\((l,r)\)的对数。
\(n,m\le5\times10^5\)
题解¶
考虑离线,扫描右端点\(r\),维护一个长度为\(n\)的\(01\)序列,第\(i\)位为\(1\)表示区间\([i,r]\)中不同数的个数为奇数。那么对于每次新加进来的\(a_r\),就是将\([poa[a_r]+1,i]\)这一段的\(01\)反转,这样一共有\(n\)次修改,设第\(i\)次修改后这个\(01\)序列的第\(j\)位为\(b_{i,j}\)。对于询问\(L,R\),相当于求\(\sum_{i=1}^R\sum_{j=L}^Rb_{i,j}\)。所以需要一个数据结构支持区间取反,求历史版本和,这个可以用线段树解决。大概是记录区间答案和、区间\(0/1\)个数、上次修改的时间、上次修改开始有多长时间处于翻转/不翻转状态。
时间复杂度是大常数的\(\mathcal{O}(n\log n)\)。
H¶
upsolved by
题意¶
题解¶
I¶
upsolved by TYB
题意¶
不想描述,大模拟。
题解¶
提高代码能力。
J¶
upsolved by
题意¶
题解¶
K¶
solved by JLK
题意¶
德扑,已经知道自己的两张牌和公共的三张牌,问是否必胜。
题解¶
如果自己不是同花顺,一定能被干掉。
如果自己是同花顺,分类讨论一下,能不能被大一点的同花顺压。
L¶
solved by YZW
题意¶
题解¶
M¶
upsolved by
题意¶
题解¶
记录¶
TYB过F(0:09),JLK写A发现复杂度不对,换YZW写L。
YZW过L(0:35),JLK再写A,RE一次后AC(0:52)。
JLK写D,WA一次后AC(2:41)。
TYB写I,但是比较麻烦,换JLK写K,然后过了(3:26)。
又换YZW写C过了(4:17),JLK WA一次后过B(4:40)。
后来I交了几次都WA。
总结¶
JLK:这场自己犯的低级错误有点多,以后要注意。
TYB:提高代码能力。
YZW:该补补计算几何了……提高代码能力。
Dirt¶
A(-1)
B(-1)
D(-1)