codeforces 945 div2 A-C

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实现数对一一对应。
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值