其他分享
首页 > 其他分享> > Atcoder做题总结

Atcoder做题总结

作者:互联网

ARC058C

发现 \(x+y+z\) 最多只有 \(17\) ,考虑状压,状态中第 \(i\) 位表示是否可以得到和为 \(i\) 的后缀。
注意一下每个位置是放 \(1\) ~ \(10\) 而非 \(0\) ~ \(9\) 。

ARC133D

区间异或和不好搞,差分一下设 \(w_i = XOR_{k=1}^i k\) 。
容易发现规律: \(w_{4x}=4x\) , \(w_{4x+1}=1\) , \(w_{4x+2}=4x+3\) , \(w_{4x+3}=0\)
于是就可以快速计算了。

ARC129D

令 \(a_i\) 是在 \(i\) 处的操作次数,则有

\[2a_i - a_{i-1} - a_{i+1} = -A_i \]

注意到这个形式类似差分,所以设 \(b\) 是 \(a\) 的差分,由上述式子可以得到 \(b_2\) ~ \(b_n\) ,又因为 \(\sum b_i=0\) 可以算出 \(b_1\) ,接下来找一个最小的 \(a_1\) ,使所有 \(a_i\) 都非负即可。

ARC130F

有些许恶心。
跟“鱼戏团表演”可以说是非常相似了。
观察题目性质,当操作次数趋于无穷时,最后的结果会像是一个凸包的形式。
如果只是这样就没有什么恶心的地方了,直接求凸包算就行。
但是!
问题在于题目是取整的,这就导致了得到的结果实际上应该是折线。
对于“凸包”上的两个点,如何算他们之间的贡献呢?
很容易犯的错误是直接把直线画出来,然后对每个点下取整。
我们发现的问题在于,“下取整”这一操作会使直线发生改变,从而影响后面的答案。
稍微玩一下就能确定算贡献的过程,如果区间是 \((l,r)\) ,且 \(a_l < a_r\) ,就应该从 \(l\) 开始向右一个一个求贡献, \(f_i\) 应该由 \(f_{i-1}\) 和 \(f_r\) 得到,而非 \(f_{l}\) 和 \(f_r\) 。
正因为这一奇特的求贡献方式,我们要求的“凸包”长歪了。
联系题目性质,知道求凸包时斜率应下取整

标签:总结,Atcoder,题目,4x,差分,凸包,做题,取整,贡献
来源: https://www.cnblogs.com/Kelvin2005/p/15957245.html