c-sum=0(abc362)

题意:给一个数字n,还有一些区间,在区间内选取一个数字,使得所有数字相加等于0.

分析:先令所有数字为右区间,如果(最大的数字)小于0,那么永远都不可能变成0,如果(最小的数字)大于0,那么永远都不可能变成0,再从1遍历到n,判断数字是否要向左移动(向左移动了sum就会变小)

#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

int main(){

int n;cin>>n;

ll ln+10,rn+10;

int an+10;

ll sum=0;

for(int i=1;i<=n;i++){

cin>>li>>ri;

sum+=ri;

}

if(sum<0)cout<<"No"<<endl;

else{

for(int i=1;i<=n;i++){

if(sum>ri-li){//如果sum-区间差还是无法等于0,直接让他取最小值

sum-=(ri-li);

ri=li;

}

else if(sum==0)break;

else{//sum-区间内的一个数可以变成0

ri-=sum;

sum=0;

}

}

if(sum>0){

cout<<"No"<<endl;return 0;

}

cout<<"Yes"<<endl;

for(int i=1;i<=n;i++){

cout<<ri<<" ";

}

}

}

相关推荐
坤坤子吖13 分钟前
C++继承:继承的基本用法与访问规则
开发语言·c++·笔记·学习
Demon--hx23 分钟前
C++ 文件流:理解 ifstream/ofstream 与 RAII 机制
开发语言·c++
纪念 22925 分钟前
C++ stack和queue
开发语言·c++
CodeYp201939 分钟前
第6讲:模板初阶
开发语言·c++·模板
吞下星星的少年·-·1 小时前
牛客周赛 119B题(贪心)
算法·贪心
.YM.Z1 小时前
【C++11】初识——右值引用和移动语义,可变参数模板
c++·c++11
喜欢打篮球的普通人1 小时前
LLVM 架构设计与原理:为什么它能取代 GCC 成为新宠
c语言·开发语言
NEFU_Jyj1 小时前
牛客周赛R166(max型瓶颈最短路,前后缀DP合并)
算法·深度优先
要练八块腹肌1 小时前
红黑树的实现以及对map和set的封装
c++
Tisfy1 小时前
LeetCode 3644.排序排列:不对则与(脑筋急转弯)
数据结构·算法·leetcode·题解·位运算