A.Protect Sheep
题意就是给你一个$n*m$的农场,有羊和狼,你可以在任意空位放牧羊犬,使得狼不能走放了牧羊犬的位置,求让所有羊都不被吃的方案,不存在就输出$No$
贪心地把所有空位都放置牧羊犬,然后这时显然狼已经不能动了,再看狼的四邻域是否存在羊即可。
代码:
1 |
|
B.Primal Sport
题意就是给你一种构造方案和$X_2$,找到一个符合构造方案的最小的$X_0$
比赛的时候没做出来,看了题解发现主要还是找规律,用$P_i$表示$X_i$的最大素因子,可以发现每一次都是从$[X_i-P_i+1,X_i]$中找到一个素数去构造$X_{i+1}$,由于要让$X_0$尽量小,那么往回推的时候找的素数应该尽量地大,然后就枚举$X_1$,$X_0$要最小肯定取$X_1-P_1+1$即可,$P$数组用欧拉筛得到即可
代码:
1 |
|
C.Producing Snow
题意就是给你$n$天,每一天你会造体积为$V_i$的雪,然后每天的温度会达到$T_i$度,所有存在的雪堆均会融化体积$T_i$(体积不够化就直接变成$0$),问你每一天一共融化了多少体积的雪
比赛的时候也没做出来,考虑的方向错了,考虑每一个雪堆,它的融化体积过程总是先被经过几天融化没化完,最后到某一天完全融化到$0$,那么我们对每一个雪堆二分一个它没融化完的最后一天,然后在这天的后一天把剩余的全部加,即算每一个雪堆对它后面的天数的贡献,然后用差分数组标记一下,写线段树的时候用的区间最大最小值剪枝,知道肯定会被凹凸凹凸的数据卡,不写又不行
代码:
1 |
|
D.Perfect Security
题意就是给你一个序列$A$和序列$B$,让每一个$A_i$都去异或一个$B_j$,使得构造出来的$A’$序列字典序最小,每个$B_j$只能用一次。
一开始被BC搞方了,根本没去看这题,最后有人说这题水题才去看的。由于要让字典序最小,肯定是贪心地让越前面的$A_i$越小,然后这就是很模板的$01$字典树了,燃鹅常见的是用来求异或最大值的,最小值的话就把正反两路的策略换一下就行了;最后针对$B_j$只能用一次的条件,加一个路径覆盖次数,加数的时候把整个路径所有点权加$1$,取出来的时候把这个数的路径所有点权$-1$,代表把这个数删掉了,每次只走路径权值大于$0$的点即可
代码:
1 |
|
E.Picking Strings
题意就是给你三种变换规则和$S$串,$T$串,$Q$个询问,每次问你能否把$S_{a…b}$变换到$T_{c…d}$。
脑洞+分类讨论神题,通过这三个变换规则可以发现
- $B$和$C$等价,直接把字符串中所有$C$变成$B$即可。
- $AAA \to empty$,好吧这是题目给的条件,不过也比较重要
- $A \to BB$,即$A$可以构造偶数个$B$。
- $B \to AB$,加上上面这条,又可以得到:$B \to BBB$,即$B$可以加上任意偶数个$B$。
- $AB \to B$,即$B$前面的$A$可以直接消掉。
- $B$不能被消掉,$B$后面的$A$字符不能被构造出来,即作为后缀的$A$只能减少不能增加。
然后就可以得到以下不能被构造的情况:
- $S$的$B$比$T$的$B$多,或$S$和$T$的$B$字符差不为偶数。
- $S$的后缀$A$比$T$的少。
- $S$和$T$的$B$相同但是多出来的$A$不为$3$的倍数,即不能通过规则$3$被消掉
- 并没有多出来的$A$去构造一个$B$且$S$串也不存在$B$去构造$B$。
代码:
1 |
|