Codeforces Round #559 (Div. 2)

题目链接:https://codeforc.es/contest/1159

A. A pile of stones

题目大意:给定一个区域,这个区域开始有多个石头存在(也有可能石头数为0),现在每次从这个区域拿去一个石头或者增加一个石头(“+”表示增加一个石头进来,“-”表示拿走一个石头),问最终该区域最少有多少个石头。

解题思路:因为所有的操作都是合法的。那么将一个人的所有操作存进一个字符串(只由“+”和“-”构成),设原先共有石头数为x,并假设x为0,那么在遍历字符串的时候遇到“+”则加1,遇到“-”则减1,同时x不可能为负数(当他变成复数的时候,我们可以将它归零),最终x为所求。

代码链接:点击查看代码

 

B. Expansion coefficient of the array 

题目大意:给定一组序列,要求找到满足 k\times|i-j| \leq min(a_i,a_j)这个等式的K

解题思路:将上述等式转换成 K \leq \frac{min(a_i,a_j))}{| i - j |},只要找到最小K就可以了。刚开始写了两层for循环进行暴力(时间复杂度O(N^2))找最小K,发现TLE了,只能进行优化,优化后时间复杂度O(N),具体实现是一层for循环遍历序列,将ai和a1以及ai和an进行处理,寻找最小K。

代码链接:点击查看代码

 

C. The Party and Sweets

题目大意:每个男生都会给每一个女生送糖果(可以送0颗,即不送),给定一组由n个数组成的序列b,bi表示第i个男生给某个女生送的糖果数是他送给其他女生中的最少颗,再给定一组由m个数组成的序列g,gi表示第i个女生被某个男生送的糖果数是她被其他男生送的中最多的数目。现在已知这两组序列,求至少一共有多少颗糖果。

解题思路:由题可建立n*m的二维数组的模型,现在需要做的就是,求这个二维数组所有元素的最小和

  • 序列g中最小数一定不小于序列b中的最大数,否则无解
  • 序列g的所有元素和为sg,序列b的所有元素和为sb,并且序列g和b都按照从小到大排序,那么最终可通过以下公式计算出结果

        sb\times m+sg - b[n-1]\times (m-1) -(g[0]==b[n-1]?b[n-1]:b[n-2])

注:这里的sb*m+sg构建的是(n+1)*m的二维数组的所有元素和,现在需要从这个二维数组中去掉m个元素(序列b中的元素),其中b[n-1]*(m-1)相当于去掉m-1个元素,那么最终需要判定b[n-1]==g[0]?,当等式成立,表示b[n-1]可由g[0]代替表示,此时去掉b[n-1],否则的话,b[n-1]无法有其他元素替代,则去掉b[n-2]这个元素。

代码链接点击查看代码

 

D. The minimal unique substring

题目大意:两个字符串s和t,字符串t是字符串s的唯一的最短子串,例如,s="10101",那么t="010",因为如果t="1"或者"0"时,t在s中作为子串的位置不唯一,当t="10"或者t="01"时,也是在字符串s中的位置不唯一;当t="1010"或“0101”或“10101”时,虽然此时t在字符串s中的位置唯一,但是他们的长度都比“010”长。所以现在已知字符串s和字符串t的长度,需要你求出一条满足上述条件的字符串s(答案不唯一)

解题思路:首先我们先观察三个串 1010,110110,11101110,答案都是红色部分,我们可以下一个结论,形如 abab ( a 中有非负整数个 1 , b 中只有一个 0 )这类的字符串答案恒为 2 ,也就是 k==2 ,然后就是用这类字符串去构造出我们所需的 k 。我们可以尝试从末尾加一个1,那么之前的串变成了 10101,1101101,111011101,那么答案为红色部分。我们可以发现,通过我们末尾添加的1,导致之前红色部分的 01 与我们末尾添加的1与前面一个0构成的 01 重复,使得之前的红色部分向后挪一位。于是,我们可以用这一规律去构造出我们想要的k,显然答案就是末尾部分的01(蓝色部分111...10111...10111)满足 0 的个数加 1 的个数等于 k-1  ,那么对中间的影响(绿色部分111...1011111...110111)往后挪一位也就是我们的答案 k ,最后就是算出这形如 abab 字符串 a 部分中的 1 的个数有多少就行了,设 x 为 a 中 1 的个数,方程为 2*x+1+k-1=n  ,化简为 x=(n-k)/2 ,根据题意 n 与 k 同奇偶,那么 x 也是唯一确定的,最后构造也由此生成。

这个题目卡了两天,实在没有思路,查看大佬的博客才最终将题目A掉,解题思路内容摘自DD_BOND的博客 Codeforces 1159D The minimal unique substring(构造)

代码链接:点击查看代码

 

E. Permutation recovery

 

F. Winding polygonal line

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值