记一次神奇的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

posted @ 2019-09-21 17:34  shzr  阅读(416)  评论(0编辑  收藏  举报