CF评分2693,豆瓣拒绝评分,这套题啥实力就不用说了
CF1375A
被爆切了(悲,md想了20分钟没有想出来,然后就看了一眼题解,wc这不直接一正一负就解决了吗。。。
脑子不转了
CF1375B
切了,首先有一组必然合法的解,就是把所有数都变为大于0的数,这样必然是最大的解,若 \(a[i]\) 还有比这组解大的就必然不合法
CF1375C
差一点,少考虑了一点
我们观察首先 \(a[n]\) 只能由比它小的数消掉并且他还是最后一个数,所以最一次消除操作右边的数一定小于等于 \(a[n]\),因为我们贪心的要让右边的数尽可能的大,所以最终右边的数是 \(a[n]\) 是最优的
我们再次观察 \(a[1]\) 只能由比它大的数消去,并且它还是最左边的数,所以同理,最后一次消除操作左边的数一定大于等于 \(a[1]\) ,我们贪心的让左边的数尽可能的小,所以最终左边的数是 \(a[1]\) 是最优的
所以只需要考虑最后一次操作,也就是若 \(a[1]<a[n]\) 则成立,否则不成立
若有人说中间的数怎么办,考虑因为 \(a[1]<a[n]\),所以比 \(a[1]\) 小的数一定能被 \(a[n]\) 消掉,所以比 \(a[n]\) 小的数一定能被 \(a[1]\) 消掉,证毕
CF1375D
构造题,挺好玩的
这种题的思路就是无论你给我的输入是什么样的,我就给你一种合法的解,一招治百变
首先,我们想到最后可以把排列变成 0~n-1,考虑怎么做呢?
如果初始的排列中的数本身就没有重复的,且值域在 \([0,n-1]\) 显然是好做的,我们找到一个不对应的数,然后将这个数先经过一步跳到n,此时这个数就空出来了,我们把应该填这一个数的位置再进行一次操作,把它变成正确的,然后又空出来另一个数,然后继续进行操作,最后形成了一个环回到了原来的位置,操作次数是环的大小+1
然后我们考虑如果原数列是有重复的呢,我们可以先把一个有重复的数进行一次操作变成没有重复的数,考虑最多所有数都是n,最多进行n次操作
把两个操作组合起来,就是通解了
欸但是,你会发现第一个操作最多是n次,第二次操作是环长+1,这个数不保证小于 \(2*n\) 的怎么办?
考虑这样一件事情,第一次操作如果是n次,那么必然所有数都是n,我们把第一个操作跑完后本身序列就是合法的
那么另一种情况呢,比如全是0,那我们第一次操作就会进行n-1次,但是我们会发现我们第一种方式最多形成一个环,所以第二种操作是n+1次,也合法
一般的,我们我们设原数列给出了k个不相同的数(且不为n),所以第一次操作就会进行 \(n-k\) 次,然而只有给出的数才会构成不同的环,这样第二次操作最多有 \(n+k\) 次,可以保证在 \(2*n\) 次内解决
标签:题解,合法,CF1375,操作,考虑,数都,我们 From: https://www.cnblogs.com/zcxnb/p/18562041