联合省选2026游记
记录一下自己的唐氏操作:
选手在NOIP里距离队线20分,作为高二老登的选手有点慌。但是自信人生二百年,选手带着老子天下第一的心进入了考场。
D1T1
十分钟秒了,于是开始写正解,写着写着感觉是
选手平复心情后回到座位,忘记了拿出快速幂这件事。
for(int v:e[u])if(v!=fa){
// int res=power(dp[v][h[v]],p-2);
for(int i=s-h[v];~i;--i){
g[i]=f[u][i+h[v]];
for(int j=1;j<=h[v];++j){
g[i]-=g[i+j]*dp[v][h[v]-j]%p;
}
g[i]=(g[i]%p+p)%p*power(dp[v][h[v]],p-2)%p;
// g[i]=(g[i]%p+p)%p*res%p;
for(int j=1;j<=h[v];++j){
dp[u][j+1]+=dp[v][j]*j%p*inv[i+j]%p*g[i]%p;
ans+=dp[v][j]*i%p*g[i]%p*inv[i+j]%p*sz[v]%p;
}
}
for(int i=s-h[v];~i;--i)g[i]=0;
}
注释是修改内容,复杂度成功退化。
CCF青天老爷没有卡我,感谢老爷。
D1T2
读完题就会
紧接着,选手发现了选手的状态里的第三维只有
选手以为自己稳了,于是看向了下一题。
赛后:
挂了15分,为什么呢?
for(sh i=0;i<=n;++i){
ch[i][0]=ch[i][1]=fail[i]=ed[i]=0;
add[i][0]=add[i][1]=adv[i]=0;
for(sh j=0;j<=m;++j)for(sh k=0;k<=m;++k)vis[i][j][k][0]=vis[i][j][k][1]=0;
}
选手清空打了
选手挂了15分。
D1T3
选手 3h 获得了 16分。
出来有点破防,因为感觉 D1T2 是人均题。
出场,发现没几个会,似乎能win(此时不知道会挂)。
第一天考完
D2T1
什么CF风格题目,半小时秒了。
保险起见测了 10 以内全排列,果不其然通过了,选手不管了。
D2T2
什么神秘题目,选手思考十分钟,选手不会
D2T3
这是什么空集空集空集,选手认真读题,发现不需要管后代只需要管儿子,而这是一个树哈希算法。
于是可以建图
选手思考了一下,发现用直径两端作为根可以得到所有树的情况,考虑到树哈希,可以用类似字符串哈希的算法进行比较大小,利用优先队列求出排名,同时可以使用权值线段树和主席树,利用启发式合并解决询问。
可以解决
选手开始写了。
选手写出10K代码后发现过不去第二个样例,此时十二点过。
选手发现以直径为根是错误的,选手紧急写了一个
选手发现启发式合并需要改成换根。
选手修修补补写到了 一点一十三通过了
选手很激动,选手忘记测菊花以至于忘写了菊花,选手忘记测
选手选择了去写 D2T2 的
D2T2
选手利用最后半小时写
选手出来稍微讨论了下,选手估分376.
day 5
出分了。
选手获得了353的分数,少了d1t2的15分和d2t3的8分,是为什么呢?
是因为选手唐啊。
幸好大概(可能)不影响选手进队,选手狗运。