codechef FEB17

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

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

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

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

SEAINVS

首先考虑一次询问怎么做。。令$a(i,l_2,r_2)$表示$P_j(l_2\le j\le r_2)>P_i$的$j$的个数,那么首先将$a(i,l_2,r_2)(l_1\le i\le r_1)$排序得到$A_0\le A_1\le \dots\le A_{S-1}$,然后答案就是$\prod_{i=0}^{S-1}(A_i-i)$

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

注意到$r_1<l_2$。设逆序对个数为$I$,则$\sum_{i=0}^{S-1}(S-A_i)\le I$,这说明$A$是一个$O(\sqrt{I})$段的分段常数函数,考虑这样求每一段:将$P_{l_1\dots r_1}$和$P_{l_2\dots r_2}$分别从大到小排序,然后将它们归并排序,那么$a(i,l_2,r_2)$就是在$P_i$之前被取出的$[l_2,r_2]$内元素个数。如果我们定义一次操作为将排序后的$P_{l_1\dots r_1}$或$P_{l_2\dots r_2}$中的前某些(一段)元素拿出来,那么$O(\sqrt{I})$次操作之后归并排序就可以完成,且每一次对$P_{l_1\dots r_1}$的操作时我们可以计算这些元素对答案的贡献。

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

复杂度$O(N\log N+Q\sqrt{I}\log N)$。

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

DISTNUM3

莫队算法

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

CHEFYODA

垃圾拼题

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

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

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

那么可以算出大厨赢一局的概率,$0$或$0.5$或$1$,概率为$0$或$1$的情况很好处理,为$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