| solved | A | B | C | D | E | F | G | H | I |
|---|---|---|---|---|---|---|---|---|---|
| 8 / 9 | O | ! | O | Ø | O | O | O | O | O |
- O:比赛时通过
- Ø:赛后通过
- !:比赛时尝试了未通过
- ·:比赛时未尝试
A Bonuses on a Line
Solve by Sstee1XD. (1:04)
题意: 给你一个轴,个小球的坐标和你能移动的时间,你目前在点,每次可以移动一个单位,问你最多能收集多少小球。
思路: 很明显最多折返一次是最优选择,两边分开讨论,二分一下即可。
AC代码
1 |
|
C Lexicographically Minimal Shortest Path
solved by lllllan & Setee1XD. 02:02(+2)
题意: n点m边的无向图,每条边上都有字符c。求从点1到点n的最短路,如果存在多条最短路,选择字典序最小的路径。
题解: 相较于朴素的最短路题目,多一个字典序最小的条件 ——》则可以在Dijkstra的优先队列里增加一个字典序的比较。——》但一定不能记录每条路径的字符串,会MLE的。 ——》那怎么办,貌似只能记录路径的最后一条边的字符 ——》但是字典序的比较需要从第一位开始比较,单比较最后一位也是有问题的。 ——》反向遍历,求点n到点1的最小字典序的最短路,此时记录的最后一条边反倒是正常路径的最前面一条边。——》当最后一个字符相同时,又怎么比较前面一段字符串的字典序呢? ——》记录进入优先队列的顺序,先进入优先队列的点一定是距离和字典序兼优的路径。
AC代码
1 |
|
D Nuts and Bolts
Solved by Sstee1XD. (-)
题意: 现有个大小分别为~的螺母和螺栓,但是他们的大小顺序被打乱了。你每次可以询问螺母和螺栓的大小关系,要求在次询问内找到每个螺母对应的螺栓。
思路: 会往二分和分治去想。二分想不到好的办法,所以考虑一下分治。我们可以选择类似于快排的分治,每次在螺母中随机选取一个,然后询问每个螺栓,将比它大和比它小的螺栓分开,记录相等的螺栓。用相等的螺栓遍历螺母, 也将螺母分开大小,大概能在次询问解决。
AC代码
1 |
|
E Tree Painting
solved by lllllan. 00:31(+)
题意: 一棵n节点的树,从一点出发到另一点将路径上所有的点和边都收纳起来。问最少需要多少条路径可以将整棵树都收纳起来。
题解: 咋一看还没啥思路,仔细一想其实只要求这棵树一共有多少个度数为1的点罢了。
AC代码
1 |
|
F Sorting Colored Array
solved by lllllan. 00:22(+1)
题意: 一个数列,每个数字都有自己的颜色。用类似于冒泡排序的规则让这个数列从小到大排序(即必须相邻的两个数才可以交换位置),只有两个不同颜色的数字才可以交换位置。判断这个序列是否可以从小到大排序。
题解: 暴力遍历这个序列,一旦存在某个颜色下,较大的数字出现在较小的数字前面,则不能从小到大排序。
AC代码
1 |
|
G The Battle of Mages
Solved by Sstee1XD & Tryna. 1:43(+1)
题意: 两个法师有一些元素,每个元素都有一定的力量。现在他们要对波,每次选取一个k,然后随机地在自己的元素中选取k个,谁的力量和大谁赢。要求你构造出他们拥有的元素,使得当k = 1或者k = 3时,第一个法师胜率高,k = 2时第二个法师胜率高。
思路: 瞎构造,可打表。
AC代码
1 |
|
H Nezzar and Board
solved by Tryna.1:18(+)
题意: 每次操作可以在序列中任取两个数、,将放入数组中,,仍保留,询问是否可以凑出。
题解: ,也就是说每次操作都是加上任意的差值,又因为不相邻的两个数的差值可以通过相邻的两个数的差值得到,所以我们只需要求相邻两个数的差值。
我们考虑个数的裴蜀定理:设为个整数,是他们的,那么存在整数使得
由此可以知道这个差值能组合出的数一定是它们的倍数,即一定是的倍数。
AC代码
1 |
|
I Nezzar and Binary String
Solved by Sstee1XD. 3:06(+2)
题意: 现有一个串,有天,每天都会选择一个区间,如果这个区间既有又有,直接失败。在这天晚上,你可以在这个区间内选择严格小于它大小一半的元素,修改它们的值。问你在第天能否获得特定的串。
题解: 正着来不太好考虑后续的要求,所以要反着来。因为要严格小于一半,所以每次修改的操作是可以确定的。我们可以建一棵线段树,每次询问区间内的的数量,如果的数量大于一半,就将其全部修改成;如果的数量小于一半,就将其全部修改成;如果等于,直接失败。最后再判断一下是否与最开始的字符串相等就行了。
AC代码
1 |
|