欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > c-sum=0(abc362)

c-sum=0(abc362)

2024/10/25 6:30:52 来源:https://blog.csdn.net/m0_74310050/article/details/140417398  浏览:    关键词: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 l[n+10],r[n+10];
    int a[n+10];
    ll sum=0;
    for(int i=1;i<=n;i++){
        cin>>l[i]>>r[i];
        sum+=r[i];
    }
    if(sum<0)cout<<"No"<<endl;
    else{
        for(int i=1;i<=n;i++){
            if(sum>r[i]-l[i]){//如果sum-区间差还是无法等于0,直接让他取最小值
                sum-=(r[i]-l[i]);
                r[i]=l[i];
            }
            else if(sum==0)break;
            else{//sum-区间内的一个数可以变成0
                r[i]-=sum;
                sum=0;
            }
        }
        if(sum>0){
            cout<<"No"<<endl;return 0;
        }
        cout<<"Yes"<<endl;
        for(int i=1;i<=n;i++){
            cout<<r[i]<<" ";
        }
    }
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com