A

#思维

我是 sb,潜意识以为只可以循环遍历一次,但是最后观察样例发现可以无限循环,那其实只需要统计有多少个不同的数就可以了,用 set 实现即可

B

#思维

观察规律,把 xyz 并排拆成 2 进制看,注意到同一位上如果有两个数为 1,那么第三个数应该也为 1,所以把同一位的数相加,如果等于 2,那么就是不可能的

解题小技巧

C

#模拟 #几何

很容易注意到偶数个一定要贪心用掉,其他的单个棍子保留,然后判断是否可以使用, 有一个坑点就是没有判断单个棍子的长度是否长于其他棍子的总长


D

https://codeforces.com/contest/2153/problem/D

#DP #线性DP #分块

启发性的循环写法:用一次遍历把相邻两个数进行交换

分块的思想:要使得差值最小,那么就要把数组分为 3 个数或者 2 个数一个小组,每个小组计算,再累加到答案上,那么题目就转化为了一个选或者不选的问题,于是就想到了使用 DP 计算,对于每一个下标 i,i 可能是和前面两个数一组,也可能是和前面一个数一组,线性 DP,可以通过O(n)的时间复杂度得到答案