Day 1
赛前一个小时队友才确定下来,虽然小朋友全都“叛逃”了,但人数好像不比前两年少(我们变成大学生队啦
开赛10min,发现03是sb虚树板子,速速拉来板子还又改又调了半个小时,居然还tm有一血?交完发现这才是我们队第二个题,感觉怪怪的。。。
随后开了12,一副sb分治加读入优化卡常的样子,交了半天还是T的,然后发现还看错题了,而且原题还tm更简单,不过还是折腾了半天才过,其实最关键的读入优化是从别的队那里借来的,听说pku校队为了这个获得了26次罚时。。。交完12我们似乎已经7题,跑到rk3了,这2h到底发生了什么?
最后一个小时刚出来10,发现某带队老师已经写完了,然后我们发现算法问题一大把,最后我还是帮忙把代码调出来了,这时候我们已经9题了,罚时也超过一天了。最后3.5h的时候做完10题就集体退场了,rk3和罚时rk1一直保持到了终场
部分题解(待更):
1003:考虑一种颜色对于答案的贡献:$n*(n-1)/2-\sum s_i*(s_i-1)/2(s_i为去掉这种颜色的点后每个联通块的大小)$,那么建立虚树后只要维护每个点下面已经被割断的点的个数,和每个点属于哪个子树(只用于询问操作),第一部分直接dfs即可,第二部分由于每个点作为祖先节点只会出现一次,直接用那指针扫一扫即可。复杂度$O(nlog\;n)-O(nlog\;n)$
1004:取$n=\sum e(i)$独立考虑每一个质数,对于i次还无法结束(可能存在某一次没有放质数)的方案数$g(i)=\prod_{j=1}^{m}{i+e(j) \choose i}-\prod\limits_{j=1}^{m}{i+e(j)-1 \choose i-1}$,容斥一下$f(i)=\sum_{j=1}^{m}(-1)^{i-j}g(j){i \choose j},\frac{f(i)}{i!}=\sum_{j=1}^{m}\frac{g(j)}{j!}\times \frac{(-1)^{i-j}}{(i-j)!}$得到就是最后i次还无法结束(每个次都至少有一个质数)的答案,容易发现上式就是一个卷积的形势,可以ntt。最后答案为$\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{k} f(i)^{j-1}f(i-1)^{k-j+1}$,预处理一下次幂即可。复杂度$O(nlog\;n+nk)-O(n)$
1005:想了好长时间的状压,被同学提示直接迭代就可以了。由于$E=\sum\limits_{i=0}^{+\infty}P(i次不变为1)=\sum\limits_{i=0}^{+\infty}1-P(i次变为1)$,由于变为1,每个质数都是独立的,且个数都要变为0。于是问题就转化为一个数每次等概率变为一个不超过他的自然数,用j次变为0的概率,设$dp_{i,j}$为答案,有$dp_{i,0}=1,(j+1)dp_{i,j}=\sum\limits_{k=0}^{j} dp_{i-1,k}$。由于数字$i$经过$j$次后期望为$i2^{-j}$,由于不为0的概率小于期望,大约只要迭代50次即可。复杂度$O(50Tm)-O(2500+m)$
1008:
1009:
1010:
1012:
Day 2
今天队友是真跑路了,打了次真ACM(仅仅是人数上,雾
开场随手点开09,发现sb数论题,20min随便切掉,可惜差一点拿到一血。
之后又写了签到题11,就开始卡06,看着列的式子半个小时啥想法没有,然后稍微模拟了一下数列变换的结果,mmp...
睡了一会儿,发现还没有人做05,就打开看了一下,感觉不难,写了一下交了MLE,全改成short还是WA了,然后发现自己的贪心还是有点问题,稍微加上一个记忆化搜索就过了。
最后找了个07的结论(其实我是打表打出来的),07也就变sb题了,后来告诉儿童神犇就被秒证了,我好菜啊......今天又四个小时就撤退了
本来以为02是无聊的找规律题,后来才发现有很妙的做法......
部分题解(待更):
1002:考虑在每个$992\times 992$的区域相同位置中抠出$8\times 8$的正方形,这些正方形中必然会有一个出现在最后的$1000\times 1000$的输入中,根据这个正方形的位置即可算出答案。由于$P\approx(1-1/2^{64})^{10^{12}}\approx 1-10^{-7}$,正确性完全可以接受f,复杂度$O(8^21000^2)-O(1000^2)$。
1004:
1005:有点麻烦的dp题,设$P(l,r)$为$[l,r]$的取值范围,$dp(l,r)$为把$[l,r]$变为有序可行的最长段数
计算$dp(l,r)$:找到第一个位置$k$使得$[l,k]$包含$P(l,r)$的前$k-l+1$个数字,用一个二维数组数组维护每个起点下每个数值为起点区间最早出现的信息,这样就可直接转移$dp(l,r)=dp(k+1,r)+1$,特别的:$dp(l,r)=0(l>r)$。dp出来的$dp(1,n)$为不使用交换操作的答案。
对于有交换的情况:考虑枚举第一个交换位置的左端点$l$和第二个交换位置的右端点$r$,满足$P(1,l-1)=[1,l-1],P(r+1,n)=[r+1,n]$,那么要求找到$p1,p2$(均可以用二维数组维护第一个这样的位置),满足$P(l,p1)=[r-p1+l,r],P(p2,r)=[l,l+r-p2]$,使得$2+dp(1,l-1)+dp(p1+1,p2-1)+dp(r+1,n)$最大,由于p1,p2可能会有很多种情况,那么再维护一个$f(l,r)$表示$[l,r]$内从后面$r$去掉从$l$开始的一段连续的数字和从前面$l$去掉从$r$开始的一段连续的数字后$dp$的最大值,那么$f(l,r)=max\{dp(l,r),f(p1+1,r),f(l,p2-1)\}$(这里的p1,p2表示第一个上述的位置,下同),则之前统计答案时用$2+dp(1,l-1)+f(p1+1,p2-1)+dp(r+1,n)$更新答案即可
总复杂度$O(n^2)-O(n^2)$,注意空间大小
1006: 假装从0开始,$f(1,i)=\frac{2^i+(-1)^i}{3}$,对于第一列为$1,2,4,...$的情况,第二行$(2^n-1),2(2^n-1),4(2^n-1),...$,在第一行的上面乘上了一个$(2^n-1)$,以此类推后面的行数及-1的情况,那么答案为:$\frac{(2^n-1)^{(m-1)}+[n\;mod\;2=1]}{3}$,复杂度$O(log\;m)-O(1)$
1007:设原根为$x$,那么每个数字模$p$都可以表示为$x^j$,如果$a^i\;\equiv\;b^i\pmod{p}$,则$(a\times b^{-1})^i\;\equiv\;1\pmod{p}$,即我们要找$w^i\;\equiv\;x^{ij}\;\equiv\;1\pmod{p}$,则$ij\;\equiv\;0\pmod{p-1}$,对于每个i有且仅有$gcd(i,p-1)$个这样的根$w$。对于每个根,根据模质数的性质,可以知道$[0,p-1]$中每一个数乘上$w$后与$[0,p-1]$一一映射,由于题面中要求二元组中的第二个数字大于$0$,那么要去掉$w=1$的情况,则$f(i)=m(gcd(i,p-1)-1)$。取$n=p-1$,答案为$\sum\limits_{i=1}^{n}if(i)=-\frac{mn(n+1)}{2}+m\sum\limits_{i=1}^{n}igcd(i,n)$$=-\frac{mn(n+1)}{2}+m\sum\limits_{d|n}^{}\frac{\varphi(d)(n/d)(n/d+1)}{2}$只需算出每个$d$和他们的$\varphi$值就行了,对于每个$\varphi$值,可以预处理出$n$的所有质因数,然后除掉最小的那个转移给下一个数字。复杂度$O(\sqrt{n}log\;n)-O(\sqrt{n})$
1008:听说四方可以艹过去,不过还是给出一个三方的。考虑把每个矩形中一个颜色(列,行)最小的二元组计入答案。考虑一个点对于答案的贡献,枚举矩形的左边界(右边界为右边任意一列),那么上下边界为上下这些列(依然不考虑右边的情况)最靠近这一行的点的距离的乘积。那么我们考虑先枚举一行,统计这一行上的点对答案的贡献。对于更新,按照列更新每个点所在列每个颜色最近的上下位置;对于统计答案,直接向左扫过去,维护从这列到当前列的上下最小值即可。复杂度$O(n^2m)-O(n^2m)$
1009:题目就是要求所有数的$gcd$超过1,容斥一下,枚举公约数$d$,那么对答案贡献为$\mu(d)\prod\limits_{i=1}^{n}\lfloor \frac{A_i}{d} \rfloor$,对于$\lfloor \frac{A_i}{d} \rfloor$部分,可以枚举除出来的结果,利用前缀和和快速幂计算。复杂度$O(n\omega log\;A_i)-O(n+Max\{A_i\})$
1011:只会存在正方形(感性理解),那么枚举左下角的那条边,看其他两个点能不能找到即可。复杂度$O(n^2)-O(n^2)$