曾经有一段真挚的AK摆在skyh面前,但他一直意淫自己AK导致没有AK。
如果非要把这AK加一个期限的话,skyh一辈子都AK不了了。
论爆零选手的爆零原因
我说T3想到了能AC的思路但是爆零了有人同情吗?
for(int j=1;j<=p&&i*prime[j]<maxm;++j){
isnot[i*prime[j]]=1;
if(i*prime[j]==0){//qaq
mu[i*prime[j]]=0;
break;
}
else mu[i*prime[j]]=-mu[i];
}
//上边是绞尽脑汁写的dp
long long ans=dp[n][0][0]+dp[n][1][1]+dp[n][3][0]+dp[n][3][1];//没取模,功亏一篑
printf("%lld
",ans%mod);
return 0;
只有T2没辜负我的期望QMQ拿稳了大众及格分
T2正解是个神奇floodfill算法(?)
首先yy一下 从一个点到矩形外所有路径上最大值的最小值
假如从这个点放水直到它流到矩形外,水一定是有路径的
如果这条路径又低又平,就毫无阻挡的流走了
如果不是很平,那么水会遇到一些瓶颈被阻挡下来
这个瓶颈就是这条路径上的最大值(高度)
所以一个格子的最高积水高度,就是所说的xxx的最大值的最小值
考虑把这信息从一个点拓展到另一个点
为了保证复杂度,最好每个点只拓展一次
那么首先要保证这个点是正确的,也就是积水积满
边界不能积水,所以边界一开始是正确的,所以从边界开始。
每个点的积水高度一定是它周围(能积水高度)最低的方格
所以必须要优先拓展答案较低的方格。
考虑用堆
然后发现已被拓展的区间是个不断扩张的过程,神似那个prim
所以可以把扩展过程看成带权边(权为$max(w[fm],w[to])$)
整个过程看成求最小生成树的过程
反正我是不会。
T3正解没打,用自己的暴力水过了
考虑每增删一个数造成的影响(强行把容斥说成莫比乌斯反演)
$ Contribution(i)=sum limits_{j in S} [gcd(i,j)==1] $
$ =sum limits_{j in S} sum limits_{k|gcd(i,j)} mu(k) $
$ =sum limits_{k|i} mu(k) sum limits_{j in S且 k|j}1 $
所以开个桶,每增加一个数,就把他所有因数的桶加一,查询一个数就把他因数的桶的大小$ *mu(d) $累加到答案里
删除同理,增减和查询的顺序需要注意一下
(话说连续两次想到正解了啥时候能在考试的时候打出来啊)