USACO2024 OPEN

Silver A

先用随便一个优先队列求出最短时间(怎么分配面试官对总时间没影响)。

赛时的想法是用并查集维护所有曾同时间结束的面试官,但是是错的。

Hack:若面试官 a 与面试官 b 同时结束,之后 b 又与 c 同时结束。用并查集会认为 a,b,c 都是绑定的整体。但如果 a 可以,不一定能推出 c 可以。

那怎么做?如果牛 i1im 同时结束了面试,同时 m 头牛的面试官又面试了牛 j1jm。令 i1im 向一个中间结点 P 连边,Pj1jm 连边。则 u 可达 v 说明 u,v 能被同一个面试官面试。

则面试官 i 能面试 n+1 就等价于牛 i 可达 n+1

Silver B

难点只在于怎么把多边形的顶点排序。如果排好序了就套个前缀和就行了。

怎么排序?对于同一 x 上的一些点 p1pm,一定有竖向边 (p1,p2),(p3,p4),

横向边也同理。这样就能找出所有边,自然也能排序。

Silver C

题意简化:给定字符串 s。对于 (K,L),从 s 中取出每个长度为 K 的子串,再从每个子串中取出长度为 L 的字典序最小的(字典序相同选左边的)子串。设 |P(K,L)| 表示有多少个位置不同的长度为 L 的子串被选择了。

对于每个 i=1n,求有多少个 |P(K,L)|=i1n3000

注意当有多个字典序最小的,会选择最靠左的。

O(n2) 的时间预处理出这两个数组:lL,i 是最大的 <i 的且 [lL,i,lL,i+L1] 的字典序 [i,i+L1] 的字典序的数。

rL,i 是最小的 >i 的且 [rL,i,rL,i+L1] 的字典序 < [i,i+L1] 的字典序的数。

则一个字符串 [A,B] 会以 [i,i+L1] 作为其字典序最小的最靠左的子串的要求,就是 [A,B] 包含 [i,i+L1],且不包含 [lL,i,lL,i+L1][rL,i,rL,i+L1]

显然可得 LBA+1rL,ilL,i+L2

所以每个 [i,i+L1],会给所有满足 LKrL,ilL,i+L2(K,L) 贡献 1,用差分即可统计出所有

posted @   FLY_lai  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示