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<<" ";

}

}

}

相关推荐
wyhwust4 分钟前
程序设计基础--C语言输入输出单元测试
c语言·开发语言
choumin19 分钟前
C++中std::move和std::forward的关系和区别
c++·std move·std forward·关系和区别
木井巳20 分钟前
【动态规划: 路径问题】不同路径
java·算法·leetcode·动态规划
程序猿编码25 分钟前
YOLOv5/v7/YOLOX 全支持:基于 TensorRT 的工业视觉推理底座详解
c++·yolo·机器学习·推理·模型推理
CQU_JIAKE31 分钟前
10.25【A】
数据结构·算法
kyle~32 分钟前
C++ 原子操作、内存模型与无锁并发编程
linux·开发语言·c++·操作系统
another heaven36 分钟前
【C/C++ C++ 面向对象架构的五大特点与能力场景:封装、继承、多态、抽象与 RAII(含实战案例)】
c语言·c++·架构
greencherry_1 小时前
大连模屿石膏课模具配比全固定,调色浇注之外还缺什么?
算法·生活
晓蛋1 小时前
什么是C语言
c语言·跨平台·编程语言·高级语言·低级语言
努力努力再努力wz1 小时前
【C++ 高阶系列】C++ 高性能网络编程:当 Reactor 遇见协程:从 epoll 回调到异步 MySQL,彻底打通任务挂起与恢复
网络·c++·mysql