CF211 Div 2 题解

人生第一次见CF重测……这次题很水,只有最后一道写起来有点麻烦


A:

题意:用算盘表示n。

解:拆出每一位模拟……题目花了一大段描述算盘的表示方法,而知道怎么表示就省去了不少看题时间……看看Standings就可以发现5分钟以内交的都是天朝和霓虹人……


B:

题意:给定长度为n的序列,求最短的长度为k的子串,使得其和最小。

解:处理前缀和,枚举左端点即可。


C:

题意:定义一个字符串有问题当存在连续的三个或以上的相同的字符,或者在两个连续的相同字符之后出现了另外两个连续的相同字符。求至少要删掉几个字符才能使得字符串没问题,并输出方案。

解:直接按照要求模拟就行了……对于第一种情况必须删得只剩两个,第二章则从后面两个中删除一个。


D:

题意:有n个人和m辆自行车。这n个人每人有b_i的私房钱,n个人还共有a的公共基金。公共基金可以花在任何人身上,而私房钱只能花在自己车上。每个人都要买自行车,求最多有多少人能买到自行车,并求在这个基础上花的私房钱之和的最小值。

解:显然答案可二分。设答案为x,判断时尽量放宽限制,即选x个最有钱的热,和x辆最便宜的自行车,能用私房钱就用私房钱,实在不行就用基金。而所求的第二个值实际上就是x亮最便宜的自行车的价格之和减去基金……


E:

题意:给定一个n*m的矩阵以及半径r,定义以(x,y)为圆心、半径为r的圆内的点为所有与(x,y)的欧几里得距离<=r的点。求两个不相交的圆,最大化两个圆内点的价值和,并求出方案数。两个圆不相交当且仅当不存在一个点同时在两个圆内。选择的圆不能有在矩阵范围外的圆内点。n,m<=500。

解:

第一步是求出以每个点为圆心的圆内点的价值和。我们可以先求出距圆心x个单位长度的弦长,记为len[x],那么价值和就是每条弦的价值之和,处理前缀和就可以在O(n^3)的时间内求出。

第二步就是找两个相离的圆。我们枚举一个圆的圆心,再枚举另一个圆的圆心的横坐标,显然不合法纵坐标的取值范围为一个区间。令d[i]表示当两个圆圆心横坐标之差为i时,纵坐标之差至少为多少,那么d[i]=max{len[j]+len[i-j]-1}。注意i的取值范围是0到2r。(不判就WA11了)维护圆的价值的前缀及后缀和以及方案即可。这部分也是O(n^3)的。

标程似乎在第二步判断是否相离时直接考虑的欧几里得距离是否大于2r……而这是不对的,考虑r=3的情况即可。

另外一个需要注意的地方是题目只保证了r>=0……应该要判r是不是太大,如果大于n+m就直接退出……不过数据似乎比较良心。

UPD:终于过了……在算d[i]的时候要注意,只有当len[j]和len[i-j]都不为0时才用来更新……不然就会WA19……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值