Codeforces 经典场

经典波兰球场

A. PolandBall and Hypothesis#

其实就是让你判断一下质数,直接暴力就行。

B. PolandBall and Game#

先把都有的说完,然后判断谁的集合更大即可。

C. PolandBall and Forest#

树的直径

D. PolandBall and Polygon#

根据欧拉公式 VE+F=2,算出 V,E 是容易的,所以就可以算 F 了。

E. PolandBall and White-Red graph#

简单画一下发现 k=1,k>3 均无解。

  • k=2

n3 时无解,否则只要有一个点没有全部和其他选上即可。

  • k=3

PolandBall and Gifts#

  • 最多比较简单

就是置换环隔着选。

  • 最少

一个长度为 k 的环如果选了 x<k 个人,那不如选 x+1 个人。于是每个环都尽量选上,直接背包即可。

G. PolandBall and Many Other Balls#

经典倍增FFT题。

写出dp的转移式子 fi,j 代表前 i 个球取出 j 组的方案数,fi,j=fi1,j+fi1,j1+fi2,j1。写成生成函数的形式 Fi=(1+x)Fi1+x2Fi2,多项式乘法+快速幂即可。

你还可以算通项以及ODE暴解递推式。

CF1149#

C. Tree Generator™#

容易发现树上一条路径一定形如 ))...)((...(。也就是对于任意子段,去掉匹配了的括号后还剩下的部分。而这个东西还是不太好表示,我们有如下引理:

这个值等于 maxk=lr1sk+1,rsl,k,其中 si,j 代表把 ( 看成 1) 看成 1 后区间 [i,j] 的和。

证明 一定可以找到最后一个 ),当 k 取到这个位置时 sk+1,rsl,k 显然就是答案。接下来证明这个值是最大的。在这个体系里面所有被匹配掉的括号贡献都是 0,最后没被匹配掉的括号,k 往左往右都会变小,得证。

那么现在就是要求 maxl,rmaxk[l,r)sk+1,rsl,k,即 maxl,k,rsk+1,rsl,k。类似最大子段和,这个也可以用线段树来维护。

简单分类讨论 k 是取在区间中点的左边还是右边即可。

submission

D. CF1149D Abandoning Roads#

难得自己想出来一道 3000 分的题,虽然说考试的时候打挂了...

首先先对较小的边缩点,然后求连通块内的最短路。显然,连通块内其实想怎么走就怎么走,但不能走较大的边。

然后不同连通块用较大的边连起来,就完事了?你发现较大的边走起来必须是一条链,也就是不能回到之前存在过连通块,比如说 1234 边权都是 3,而 154 的边权都是 4,这时走外面一圈会更短但是这不符合条件。

所以我们有一个暴力的思路,状压连通块。连通块的个数是 O(n) 的,仔细观察数据范围 n70。然后发现只有一个点的连通块显然不用压,只有两个的也显然不用压,于是就只有 70/3=23 个连通块。

还是太多,观察三个点的连通块,由于 a<b,所以其实也一定不会走出去再走回来,所以也不用压,于是要压的点只有 70/4=17 个了。最后跑最短路转移(类似最小斯坦纳树)即可。复杂度 O(2n/4mlogm)

submission

E. Election Promises#

神仙博弈题。首先如果没有第二个操作就是一个很简单的有向图博弈,设 valu 代表所有 uvvalvmexsx=valu=xhu。结论:如果存在 sx0 那么先手有必胜策略。

证明 可以说明如果不存在 sx0,那么下一步操作一定存在 sx0,否则下一步操作一定可以让 sx 都为 0。而最后的必败态的 sx 显然全为 0,所以先手显然可以让后手进入必败态。

构造方案如下:找到一个最大的 sx=0x,然后找到一个可以减小的 u,再把其出边都搞一遍,由于这是最大的,所以他的出边遍历所有 x

submission

posted @   Semsue  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
Title
点击右上角即可分享
微信分享提示
主题色彩