Code With Jiangly(short)

green

brute force

151: Good Triples

digsumdigsum 相加过程中,若有进位,则每次进位,digsum(n)digsum(n) 都比digsum(i)\sum{digsum(i)} 少9,必不可能相等,所以每一位单独考虑,即拆位。
nn 的每一位数为mm ,将其分成三份,有Cm+22C_{m+2}^2 种分法。
将每一位的分法相乘即为答案。

152: Chtholly’s request

打表发现:第iizcyzcy 数的形式是i+i[::1]i+i[::-1]。暴力枚举即可。

153: Binary String Copying

考虑该区间排序后最终形式是:00000111100000……1111
所以有效排序区间应该从该区间内的第一个11 开始到最后一个00 结束。
预处理出每个数右边(包含)第一个11 的下标和左边(包含)第一个00 的下标。
对于每次询问,得到有效区间,若r<=lr<=l,则统一记为(11)(1,1),存入setset

154: Vampiric Powers, anyone?

先选一个后缀subisub_i,得到一个后缀值放在最后。再次选一个后缀subjsub_j,所得新的后缀值为i,ji,j 之间的异或值,所以转换为求最大异或区间值。
可以考虑字典树。但由于本题值域较小,可以先枚举右端点,再枚举前面的值。

155: Tracking Segments

二分答案。
checkcheck:把前xx 次的11 都修改上,做一遍前缀和(快速统计区间内1的个数),枚举所有询问,检查是否有cnt1>cnt0cnt1>cnt0

156: Ice Sculptures

枚举每隔几个人里选一个,即nn 的约数。
设某个约数为xx ,在枚举前xx 个人里选哪个,再每个xx 人选一个。
对于每个约数,每个人都会枚举到一次,O(n)O(n)2(n)2\sqrt(n) 个约数,总时间复杂度为O(n(x))O(n\sqrt(x))

157: Martian Dollar

数据很小,暴力枚举买入ii 和卖出jj 的时刻即可,ans=max(ans,bans=max(ans,b%a[i]+b//a[i]\*a[j]) 。

158: The Text Splitting

找出满足ai+bj=nai+bj=ni,ji,j
数据很小,直接暴力枚举ii ,再查看是否存在适合的jj 即可。
增强数据的话或许能用扩展欧几里得。

159: Tear It Apart

暴力枚举所有最后留下的字母,计算所需步数。
记录所有非留下字母的下标,若当前下标与上一个删除的下标相邻,则放入下次,注意他的下标要减去已删除的字母数量才是他的新下标。直至删完。

160: Fire Again

bfs即可。

161: Constructive Problem

先求出m=Mex(a)m=Mex(a)
想让Mex(a)Mex(a) 变大,必定要将一些数据改成mm ,然后新的Mex(a)=m+1Mex(a)=m+1
如果m+1m+1 本就存在,就要将第一个m+1m+1 到最后一个m+1m+1之间的数都改成mm 。但不能修改后使Mex(a)Mex(a) 变小,这种情况只有可能是某个小于mm 的数xx 的所有数都在这个区间内,也就是说把这个区间内的数都修改了就不存在这个xx 了。
如果m+1m+1 不存在,只要让一个不会影响Mex(a)Mex(a) 的数改成mm 即可,可以是大于m+1m+1 的数或者小于mm 但个数不为11 的数。

162: Accounting

观察数据范围,发现xx 最大为10001000
暴力枚举xx\-100010001000 ,快速幂checkcheck

163: IQ test

求出每个数的奇偶性,输出不同的那个的下标即可。

164: Bargaining Table

暴力枚举左上方点和长宽即可。

165: Triangle

RIGNTRIGNT:某两个向量点积为00
ALMOSTALMOST:枚举所有点朝四个方向移动后的新向量,判断是否点积为00 且叉积不为00
剩余情况为NEITHERNEITHER

166: Make It Permutation

答案最大为cn+dcn+d
排序后从左往右遍历,看a[i]a[i] 是否等于排列的下一个数jj
a[i]==ja[i]==j,则j++j++
a[i]\<j,而jj 是从小到大枚举的,比当前jj小的必定已经出现过,将a[i]a[i]删去,当前代价加cc
a[i]>ja[i]>j,则将jja[i]1a[i]-1都加入,j=a[i]+1j=a[i]+1,当前代价加d\*(a[i]-j)
每次处理完后将ansansres+c\*(n-1-i) 比较并更新,即将后面的数都删去。

167: Pull Your Luck

看到pp 这么大,可以猜到其中有循环节。
f=2nf=2n 时,(f(f+1)/2)(f(f+1)/2)%n=0xx 又回到起点,接下来又是和之前一样的循环(可以模拟验证)。
所以枚举到min(p,2n)min(p,2n) 即可。
更暴力的解法:不知道循环节在哪?直接记录y=(i(i+1)//2)y=(i(i+1)//2)%n 的次数,超过一定次数,直接输出No'No' 。至于到底多少次,实测100100 即可。

168: Unforgivable Curse (hard version)

排序后不等直接NONO
只有n>=k+2n>=k+2 才能实现相邻交换,n<k+2n<k+2 的情况直接特判。
n>2kn>2k 时,相邻的数都能换。
这之间的情况,不能换的范围在nk+1n-k+1kk 之间,这之间都相等就YESYES,否则NONO

169: Unforgivable Curse (easy version)

排序后不等直接NONO
k=3k=3 ,可以交换间隔为3344 的数。如果至少有55 个数,就可以交换边缘相邻的两个数。
但此时还有中间一个数不能动,但长度为66 时相邻的数都能换。
对于小于66 的情况,可以bfsbfs
大于等于66 ,排序后不等直接NONO ,否则YESYES

170: Same Count One

首先11 的总个数不是nn 的倍数时必不可能。
统计出每个数组11 的个数。
枚举每一位,找出其中 这一位为0011 的个数小于目标个数的数组 和 这一位为1111 的个数大于目标个数的数组,尽可能配对。

constructive algorithms

171: Jumping Through Segments

二分答案xx
checkcheck :记录可以走到的范围。
一开始的范围为L=x,R=+xL=-x,R=+x ,每次与下一个要到的区间取交集:L=max(L,l),R=min(R,r)L=max(L,l),R=min(R,r) ,然后之后能走的范围为Lx,R+xL-x,R+x
若无交集,则falsefalse

172: ABBC or BACB

如果一段AA 串前面或者后面存在一个BB,那么这段中的AA 都可以被替换。
ss 中必须同时出现AABB ,否则答案为00
如果最前或最后为BB ,那么所有的AA 都可以被替换。
否则就是若干BB 插在AA 串中,只有一段AA 不能被替换,答案为所有AA 的个数减去最短的那一串的长度。

173: Salyg1n and the MEX Game

最优策略:AliceAlice 先插入Mex(S)Mex(S) ,然后BobBob 每次拿出什么数就插入什么数。

174: Madoka and Childish Pranks

s[1][1]==1s[1][1]==1 ,直接无解。
从右下到左上遍历,若s[i][j]==1s[i][j]==1,则将这个方格与它左边一个方格染色;
如果是最左边的,则与上边一个染色。

179: No Prime Differences

mm 为素数,从上往下从左往右填充即可,差值只有11mm
否则将每一行都加上一个偏移量,使差值为11m+1m+1
加偏移量方法:ans[i][j]=1+i\*m+(i+j)%m

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2023-2025 Shiki
  • Visitors: | Views: