| solved | A | B | C | D | E | F | G | H | I | J | K |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 11 / 11 | O | O | O | O | O | O | Ø | O | Ø | O | Ø |
- O:比赛时通过
- Ø:赛后通过
- !:比赛时尝试了未通过
- ·:比赛时未尝试
A. Rooms and Passages
Solved by Sstee1XD. 3:44(+)
题意: 一堆数字,从中选两个进行没有进制的加分,问其中的最小值和最大值。
思路: 把所有数字转换成长度相等的字符串,补前置。越前面的数字对数字大小的贡献越大,所以每次都贪心地凑前面的数字即可。要同时和很多数字进行计算,那么搞一个字典树即可。
AC代码
1 |
|
B - Maximum Tree
solved by lllllan. 00:16(+)
题意: 分配树上每一层节点的孩子节点数量,使得树上节点数最大。
AC代码
1 |
|
C - Planet Communcation
solved by Tryna.0:55(+)
题解: 三维判断点是否在直线上
AC代码
1 |
|
D - Double it
solved by Tryna.0:08(+)
题解: 水题,不断除二就行
AC代码
1 |
|
E. Text Editor
Solved by Sstee1XD. 2:06(+3)
题意: 在模式串中求最长前缀串,使其在文本串中至少出现次。
思路: 二分长度,用进行即可。
AC代码
1 |
|
F - Polygon Triangles
solved by Tryna.0:23(+)
题解: 水题,判断所有三角形是否合法即可
AC代码
1 |
|
G - Generative Model
solved by Tryna.(-)
题意: 给出一个正整数,首先要对这个数进行质因数分解,然后将这些数字拼接成一个字符串。我们现在有两种操作:
- 拿出一个数字,转化为相应的字母(a = 1, b = 2…)
- 拿出两个数字,也转化为相应的字母,数字范围[10, 26]
问我们最终能拼接成的字符串的数目。
题解: 通过基本的数论知识,我们可以知道最终字符串的长度不会很长。因为, 所以就算质因数全为最小的,显然不会超过位。所以我们考虑状压dp,枚举每个数字的状态。
AC代码
1 |
|
H - Logo
solved by lllllan. 00:06(+)
题意 hello world
AC代码
1 |
|
I - Math Class
solved by lllllan. (-)
题意: 给定个数字,要求将这些数字分配到两个班里,要求如下
- 回文数可以分到一个班
- 只含4或7的幸运数字可以分到一个班
- 同时满足以上两个条件可以任选一个班(只能选一)
- 每个数字在该班里,必须要有一个朋友,eg:数字a[i]和a[j],当<=k时两个数字属于朋友范畴
判断是否能将所以数字都分到某个班里,并且每个数字至少有一个朋友。
题解: 对于只属于回文数的、只属于幸运数字的,分班是没有疑问的;既不属于回文数、又不属于幸运数字的,无法分班就不可能完成任务了。所以需要考虑哪些“摇摆数字”(即使回文数又是幸运数字,可以选择去其中一个班级)。对于摇摆数字的班级选择,我们考虑搜索。
- 第一维状态,位置or下标。
- 对于某个摇摆数,理论上可以任意选择某个班加入,但是为了加入的那个班能找到朋友,或者去成为某个班里某个孤独的数字的朋友。某一位摇摆数的班级选择,还要看其他位数字的“脸色”。增设两维状态,分别记录A班和B班的前一位数字,距离这一位有多少距离(下标差)。
- 再细致一些,增设两维状态分别记录AB两个班前一位数字是否已经匹配到了朋友。
大致上定义状态dp[pos][preA][preB][isA][isB]用来表示,递归到当前pos位时,A班的最后一个数字距离我们preA的距离,他isA ? 有 : 无朋友。B班最后一个数字距离我们preB的距离,他isB ? 有: 无朋友。值为true或false表示当前的分班方案能过满足题目要求。
搜索细节:
- 当preA=k and isA=false时,就一定需要给他分配朋友了,但是如果当前pos位不能进入A班,表示当前搜索的方案不能满足题意要求。preB和isB同理。
- 某一位pos选择了A班之后进入下一步递归,则应将preA更新为1,isA根据前一次的preA和k的关系判断他是否已经有朋友。而preB则需要+1,但是因为k有上限,我们不需要记录一个太大距离,只要一个k+1表示超出朋友范畴即可
- 没想到最重要的卡住空间复杂度,用一手
bitset<maxn> dp[][][][]比bool类型都还能小一半空间
AC代码
1 |
|
J. Jeronimo’s List
Solved by Sstee1XD. 1:41(+5)
题意: 计算出序列后,问整个序列中第小的数。
思路: 卡了快排,计数排序即可。写的时候数组里面套了个数组一直,不知道为啥。
AC代码
1 |
|
K. Random Numbers
solved by lllllan. (-)
题意: 树上每个点都有一个权值。两种操作,询问:求以k节点为根的子树的权值乘积、以及这个乘积的约数个数;修改,k节点的权值乘以val。
题解: 单点修改,子树查询 —— 单点修改,区间查询 – DFS序+线段树张手就来。但是,,怎么求乘积和约束个数?
- 题目保证,每个的权值和所有修改的乘数,其最大质因数为13.
- 以质因数作为切入口,所有权值都能拆分成若干个质因数的乘积,因此在线段树的节点上,我们记录每个权值的{1,3,5,7,11,13}每个质因数的个数,方便合并,容易求得乘积。
- 至于这个乘积的约数个数,我百度一个性质:
假设一个数可以拆分成质因数,且这些质因数的个数为。那么这个数的约数个数
AC代码
1 |
|