A(下棋模拟)
解题:1.三人的得分总数一定是偶数(平局会使总分+2,某人赢使总分+2)
2.当p1+p2<=p3的时候,不难想到 p1,p2全部用完,能达到的平局数目最多
那么就是p1+p2为答案。
3.当 p1+p2>p3的时候,
可以分析得到,若p3为偶数,则p1+p2也为偶数,这时p1与p2可进行和棋,当p1+p2不断-2到与p3相等的时候,这时候可以一直平局,所以全部对局都可以平局
p3若为偶数同理,所以答案为总数/2
B(数字位运算)
下图我们对最后一个案例进行分析
我们可以观察到每3项形成的数字位或后的值一样。
我们对数字的位或可以分到每一列。
答案就是每一列位或值一样,所需要的长度中取最大值。
容易想到,对于每一位,长度为0的最长子串,该串长度+1便是答案。(因为该长度的子串一定含有1)注:如果全为0,该列则不作为考虑,任意值都可以,直接跳过。
较为简单
C(局部最大值)(构造)
同时我们需要考虑从哪一项开始放第一个局部最大值,
我们需要想到若1和n在一起,那1永远成为不了局部最大值,因为1加上最大的也无法超过n加上任意一个数字,
所以我们放的位置上不能出现1。也就是若1在奇数位置,采用偶数位放置,反之则类似的道理。
我们用set去存放局部最大值和非局部最大值(set可以自动排序,方便分配后续的q)
例如最后一个案例
set1存了2,5,6
set2存了1,3,4,7,8
分别分配了8,7,6和
5,4,3,2,1
易证明这种分配方法的合理性。分配过程可以用map实现数对一一对应。