CF1553题解
CF1553
A. Digits Sum
一个显然的结论,当且仅当\(x\)末位为9时条件成立
B. Reverse String
数据范围极小导致状态极少,直接暴力广搜即可
C. Penalty
所要求的是所有可能中的最小值,贪心策略就很明显了
为了让一队尽可能快赢球,让他的"?"全部为1,对方的"?"全部为0
然后按照题意判断即可
D. Backspace
看到dmy和jly没做出来我还傻了一下
对于按backspace的条件只有两种:
1.开局没有已输入的文字,猛按backspace
2.已经开始输入后,每次囤积的文字只会有一个。(即不存在按多个字符后一起删掉的情况,因为效果相同但显然不够灵活)
第一种条件较为特殊,它导致第二种条件的初态难以确定,但是终态是非常显然的,于是考虑倒序处理问题
然后就有一个非常基本的贪心,尽可能早的匹配更多的字符,所以这道题可以DP
第二种条件同时保证了我们DP维数的和法,进行正常dp转移即可
E. Permutation Shift
捉摸半天没有头绪是突然瞟到了\(m\)的范围,问题迎刃而解
对于一个\(i\),当它已经是\(x\)个数归位时,剩下的\(n-x\)个数在最优情况下也需要\(\frac{n-x}{2}\)次
于是就得到了一个不等式
结合\(m\leq \frac{n}{3}\)得到\(x\geq \frac{n}{3}\)
于是这样的\(i\)最多有3个,暴力匹配即可
F. Pairwise Modulo
感觉非常套路的一个题,题目的A序列中元素两两不等直接一个\(ln n\)甩人脸上
剩下用树状数组随便维护加入一个数时的贡献借口
G. Common Divisor Graph
看似恶心,其实弱智
首先奇偶分析,发现答案不超过2
对于答案为0,显然是用并查集后两数在同一集合中
对于答案为1,显然是用一个\(A[i]+1\)合并了的两个集合
剩下的必为两个奇数,两数个进行一次操作,就都有了一条连向2的边
然后没了?就这?亏我对着\(gcd(A[i],A[i]+1)==1\)想了好久
H. XOR and Distance
很有趣的一道题
对于异或问题,马上想到Trie树和线性基
再看题目所求为两数间的异或,做法大概是Trie树了
一开始想错了一个结论,以为异或上x是只需将Trie树上到x的路径上x当前位为1的节点左右儿子互换
后来突然发现要将整层的左右儿子互换,做法直接复杂度炸飞,很快就弃了这个思路
但是后来又没想法,只能回来想补丁,发现只要一个小贪心即可
注意到每一层的点数不同,所以要尽可能让点数多的层尽可能的少换
于是得到了一个逐位交换的做法:
从小到大枚举维数,强制枚举的位数交换,在枚举较小的位的交换情况,每次暴力进行交换和up
以上的从小到大指当前层点数的从小到大
于是对于一个含\(2^{k-i}\)个点的层,最多会被交换\(2^i\)次,于是对于每层操作的复杂度为\(O(2^k)\)
共有k层,总的复杂度为\(O(k*2^k)\)
这种靠贪心保证复杂度的小trick有点意思
I. Stairs
剩下先咕着

浙公网安备 33010602011771号