![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
构造
文章平均质量分 76
qq_35003691
这个作者很懒,什么都没留下…
展开
-
AtCoder Beginner Contest 081 D
D Non-decreasing 题意:给N个数,有操作f(a,b) 把第a个数的值加到第b个数上。求一个小于2N的操作序列,使给出的序列变成非递减序列。 题解:当序列为非负序列时,通过a[i+1]+=a[i]构造; 当为非正序列时a[i]+=a[i+1]; 所以先用N个操作(加绝对值最大的数)变成非正/非负序列,然后按照上面的构造方法构造即可。 注意边界。 #include<bit原创 2017-12-17 11:16:02 · 188 阅读 · 0 评论 -
cf446 div2
B 题意:A[]中 第i人可以干掉i前连续A[i]个人,若每个人同时干掉敌人,问最后剩下几个人。 题解:从后往前扫一次,依次比较当前位置能杀死的最靠前的人位置 和 之前的人能杀死人的最早位置,O(n); #include using namespace std; typedef long long ll; typedef long double db; typedef pair pii原创 2018-02-04 19:01:07 · 561 阅读 · 0 评论 -
CodeForces - 300A
题意:给出N个数,要求把它们分到三个集合中,使三个集合所有元素的积分别满足:小于零;大于零;等于零。题目保证有解。思路:题目保证有解,说明每个集合元素都至少有一个,而且我们可以得知,至少有一个负数和一个零。所以这样构造:1.只放一个负数到第一个集合。2.正数放到第二个集合中,保证第二个集合有元素。3.如果负数还剩奇数个,就把一个放到第三个集合中,剩下的偶数个负数放到第二个集合中; 如果负数还...原创 2018-02-12 12:15:41 · 149 阅读 · 0 评论