Processing math: 58%

codechef FEB17

r_64 posted @ 2017年2月19日 10:53 in 未分类 with tags codechef , 1090 阅读

比赛刚放出来的时候有7个题,四天以后就只有5个题了。。怎么感觉cc很缺题的样子

有两个题没做。最近越来越懒了。其实是我不会

其他题都是哄小孩子的简单题。

SEAINVS

首先考虑一次询问怎么做。。令a(i,l2,r2)表示Pj(l2jr2)>Pij的个数,那么首先将a(i,l2,r2)(l1ir1)排序得到A0A1AS1,然后答案就是S1i=0(Aii)

证明很简单。。因为是求某个01矩阵的积和式,所以按照1的个数最小的那一行展开即可证明

注意到r1<l2。设逆序对个数为I,则S1i=0(SAi)I,这说明A是一个O(I)段的分段常数函数,考虑这样求每一段:将Pl1r1Pl2r2分别从大到小排序,然后将它们归并排序,那么a(i,l2,r2)就是在Pi之前被取出的[l2,r2]内元素个数。如果我们定义一次操作为将排序后的Pl1r1Pl2r2中的前某些(一段)元素拿出来,那么O(I)次操作之后归并排序就可以完成,且每一次对Pl1r1的操作时我们可以计算这些元素对答案的贡献。

写一个查询“区间[l,r]<k的最大元素是谁”的数据结构,主席树轻虐。

复杂度O(NlogN+QIlogN)

这种题不会做不要害怕。。只要牢记sereja的智商不会超过你我的智商(误

DISTNUM3

莫队算法

树上带修改莫队,显然可以做到O((N+Q)N2/3),至于为什么能过。。问mgch咯

CHEFYODA

垃圾拼题

把能互相移动的点连边,显然大厨能赢当且仅当任意最大匹配包含(1,1),原理参见我的noi2011 game题解

第一条规则:大厨能赢当且仅当N,M中有偶数

第二条规则:大厨能赢当且仅当N,M都是偶数

那么可以算出大厨赢一局的概率,00.51,概率为01的情况很好处理,为0.5的情况答案就是

\frac{\sum_{i=P}^K\binom{K}{i}}{2^K}

为了不爆精度,注意到\binom{K}{i}可以直接由\binom{K}{i-1}推来,维护\binom{K}{i},写成a\times 2^b(1\le a<2)的形式就好

INTERVAL

f_{i,j}表示以A[j\dots j+B_{i-1}-1]为初始局面从第i轮开始玩的最终结果。。转移是个Sliding Window,裸的单调队列,复杂度O(NM)

MFREQ

我操。。原来看错了所以写了个主席树啊。。然后看了一下。。好像有一个consecutively啊。。等于问的是有没有连续出现这么多次的啊

那么a_{\lfloor\frac{l+r}{2}\rfloor}肯定是这个数。。然后看它往左往右走多远即可,O(N+M)

我就说怎么这题300+人过。。

GERMANDE

对每个点处理出它为一个州的起点时Zeros赢还是Ones赢

枚举起点是谁,一共有o_2种可能,对每种起点直接判断谁赢,复杂度O(o_1)

总复杂度O(o_1\times o_2)=O(N)

MAKETRI

这题比想象中难。。开始以为所有可能的长度一定组成一个区间,就卡了30min。。反例N=3,\{1,10,100\}20就不是合法长度

应该是枚举三角形的另外两条边中较长的那条a_i,为了使方案数最多,较短的那条显然取a_{i-1},那么搞出所有[a_i-a_{i-1}+1,a_i+a_{i-1}-1],取区间并就好

mdzz

CHEFAPAR

丢掉前面连续若干个1,剩下的序列长度就是需要补交的100卢比数量,再看剩下多少个0就是需要补交的1000卢比数量


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter