2013-2014 ACM-ICPC Northeastern European Regional Contest (NEERC 13)
- A - ASCII Puzzle
- C - Cactus Automorphisms
- D - Dictionary
- E - Easy Geometry
- G - Green Energy
- H - Hack Protection
- I - Interactive Interception
- K - Kabaleo Lite
C - Cactus Automorphisms
题意简述
给一棵仙人掌($n\le 5\times 10^4$),求其自同构的数量。
图的自同构是一个从 $V$ 到 $V$ 的一一映射 $m$,满足对于任意边 $\{u, v\}\in E$,均有 $\{m(u), m(v)\}\in E$。
主要思路
考虑树怎么做:显然重心置换之后还是重心,所以令重心为根(有两个就新建一个虚根),然后树哈希。
如何推广到仙人掌?直接建圆方树,那么对原图置换之后相当于对圆方树进行置换。此时圆点不能变成方点,所以有两个重心的时候,只取一个为根。
由于方点的儿子是有序的,所以方点只支持 reverse 儿子序列;但如果方点是根那么就是循环移位加翻转,一共 $2\times cnt(cir)$ 种。
D - Dictionary
题意简述
给 $n$ 个单词 $a_i$,你需要构造一棵 Trie,使得每个单词都能表示为某个节点到其子树内某个节点的这段路径,并且 Trie 上的节点最少。$n\le 50$,单词长度都不超过 $10$。
主要思路
首先至多要 $\sum|a_i|$ 个点。
考虑把一个单词 $a$ 的一个前缀接在另一个单词 $b$ 的一个子串上,那么就能节省这个前缀的长度。
于是就转化为在一个有向完全图上求一棵最大的树形图。这个树形图上的边全都可以省。
朱刘算法冲冲冲。
顺带一提这个题要方案于是写起来很垃圾。实际上因为数据很小,随便写都能过,感觉也还好。
参考代码
1 |
|
H - Hack Protection
题意简述
给个序列,求有多少个区间异或和等于按位与的值。$n\le 10^5,W<2^{31}$。
主要思路
从左到右枚举右端点,注意到右端点往左 AND 只有 $O(\log W)$ 种不同的值。
再 XOR 前缀和一下。
于是相当于求 $O(n\log W)$ 个区间中某个数的数量。
随便 $O(n\log W\log n)$。
参考代码
1 |
|
I - Interactive Interception
题意简述
交互题。有一辆小车,开始在 $[0, p]$ 中的一个整点,小车有一个向右的整数的速度 $q\in [0, v]$,当然你是不知道的。
每次你可以问小车在不在 $[L, R]$ 里,问完小车会向右移动 $q$。请用至多 $100$ 次询问求出小车某一时刻的位置。$p,v\le 10^5$。
主要思路
可能的情况在二维平面的矩形里,一次询问相当于用一条定斜率的直线去切它。由于座标范围比较小,可以直接存储每个横坐标对应哪些纵坐标还可能是答案,然后询问的时候二分询问点,使得把剩下的点切成尽可能均匀的两部分。
然后感觉挺宽的,跑不满。
参考代码
1 |
|
K - Kabaleo Lite
题意简述
桌上有 $n$ 堆筹码,堆顶颜色分别为 $b_i$;$p$ 个玩家,你是第一个,每人手上分别有一个颜色为 $l_i$ 的筹码。所有玩家依次将自己的筹码放到某堆的堆顶,最后统计占据最多筹码堆堆顶的颜色,称其为胜利颜色。
你有一个目标颜色 $h$,并希望自己的目标颜色无论如何为胜利颜色。问你能够把自己手上的筹码放到哪些堆上,使得满足条件。
颜色数 $c, n, p\le 10^6$。
主要思路
显然最坏情况是所有人都来把覆盖你的颜色的筹码。于是就是个大讨论。
我感觉写得也非常不清真。总之过了就行。
参考代码
1 |
|