记一次神奇的codeforces
今天有一场codeforces的div3,时间挺合适,于是就想打。结果发现rating超过1600就不能报名。虽然shzr好久不打CF了而且很菜,但是毕竟还是到了1600的,于是和ZUTTER_一起用原来的一个小号:wzxakioi参加了比赛;
然而div3是真的简单,虽然网很卡,但是终究还是AK了,找了一个算rating的插件算了一下,发现这一场可以上254...??? 比我的大号都高了...
A:
十分简单,扫一遍,需要改就改,没了;
B:
从大到小,显然是最优的,如果不放心,就用交换法证一下也行;
C:
题意有点模糊,然而其实指的就是普通的覆盖,不要管什么“不严格在里面”就好了。算一下黑色覆盖的面积和,如果等于白色就不行,否则就可以;
D:
先排个序,由题意可以得到 $a_1+b_1z=a_2+b_2z=...=a_n+b_nz$ ,考虑减掉 $a_1$ ,整个方程除以 $z$ ,发现 $a_i-a_1$ 必须是 $z$ 的倍数,同时,$z$ 越大,$y$ 越小,所以 $z$ 对于所有的 $a_i-a_1$ 取个 $gcd$ 就好了。然后你会发现 $b_1\geq b_2\geq ...\geq b_n$ ,且只要确定了一个 $b_i$ ,其它的就都确定了,因为要最小化 $\sum b_i$ 直接设 $b_n=0$ 就可以了;
E:
先二分,找到最后一个完整段的结尾;再二分,找到最后一个完整的数;最后输出正确的位;
F:
两个转移:$dp[i]=dp[i-1]+i$; 如果 $i$ 这个位置可以放路由器,那么 $dp[k]=dp[ \max(0,i-k-1) ]+i,k\in[\max(1,i-k),max(i+k,n)]$ ,这两个操作用线段树可以很方便地实现。
Update:
--shzr