Loading [MathJax]/jax/element/mml/optable/BasicLatin.js

XIII Open Cup named after E.V. Pankratiev. GP of Ukraine

A. Automaton

后缀自动机可以得到O(2n+1)个状态,但是后缀自动机会拒绝接收所有不是S的子串的串,所以在建立后缀自动机的时候不复制节点即可得到n+1个状态的DFA。

  

B. Beinz

用Lucas定理计算组合数即可,时间复杂度O(p+tlogn)

  

C. Cutting

首先将串插入Trie中,可以去掉一些冗余状态。

dp[l][r][x][y]表示[l,r]这个区间切成串x的前缀y的最少步数,可以枚举下一个匹配点转移。

f[l][r]表示[l,r]消完的最小步数,可以暴力转移求解。

在计算dp的时候加上可行性剪枝即可,复杂度达不到理论上界O(n5)

  

D. Disclosure

对于一条边x>y,若去掉之后x不能到达y,那么它是必需的。

首先拓扑排序求出拓扑序,然后按照终点拓扑序为第一关键字,起点拓扑序为第二关键字从小到大加边。

对于每个点,维护一个bitset,表示当前从哪些点可以到达自己。

时间复杂度O(nm32)

  

E. Embedded circles

如果询问i的范围完全包含询问j,那么ij连边,这样可以得到一棵树。

因为题目的限制,所以它给出的是这棵树的dfs序列。

维护一个栈,按深度维护当前询问到根的路径,每次读入一个新的询问,如果它的圆心不被栈顶询问包含,那么弹栈,这样就可以找到当前询问的父亲。

每次弹栈的时候计算被弹询问的答案,为了保证复杂度均摊线性,需要找到若干个属于它的且不属于它任何孩子的一个起点,然后从这些起点开始BFS染色。

每次BFS染色出界的时候,在栈中二分查找出深度最大的包含了这个位置的询问,那么这个点就是那个询问的一个可能的起点。

时间复杂度O(RC+QlogQ)

  

F. False figures

留坑。

 

G. Grouping

首先将a从小到大排序,那么相当于要求把a分成k段,每段计算所有数到区间中位数的差的绝对值之和,要求最小化这个和。

因为a有序,所以计算一段的代价可以用前缀和做到O(1)

f[i][j]表示前j个数分成i段的最小代价,那么f[i][j]=min(0\leq k<j)

转移具有决策单调性,所以可以分治求解。

时间复杂度O(nk\log n)

  

H. Hidden triangles

留坑。

 

I. Interactive

用FFT加速多项式乘法即可,注意需要开long double。

时间复杂度O(n\log n)

  

J. Joinery

枚举长方体的8个端点,然后枚举6个面,在每个面上三分套三分查找表面距离最远的点即可。

  

posted @   Claris  阅读(285)  评论(0编辑  收藏  举报
编辑推荐:
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 《HelloGitHub》第 106 期
· 数据库服务器 SQL Server 版本升级公告
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)
历史上的今天:
2015-10-08 BZOJ3165 : [Heoi2013]Segment
2015-10-08 BZOJ2725 : [Violet 6]故乡的梦
点击右上角即可分享
微信分享提示