问题标题: 酷町堂1594   军队调度怎么做?(50)

-1
0
已解决
李牧之
李牧之
新手光能
新手光能
#include<iostream>
using namespace std;
int a[101];
int main(){
    int n,l,r,x=0,ans=0;
    cin>>n;
    for(int i=0;i<n;i++) {
        cin>>a[i];
        x+=a[i];
    }
    cin>>l>>r;
    if (x<l*n||x>r*n) cout<<"-1"<<endl;
    else{
        for(int i=0;i<n;i++){
            if (a[i]<l) {
                int k=l-a[i];
                a[i]=l;
                for(int j=0;j<n;j++){
                    if (j!=i){
                        if (a[j]+k<=r) {
                            a[j]+=k;
                            ans+=k;
                            k=0;
                            break;
                        }
                        else {
                            ans+=(r-a[j]);
                            k=a[j]+k-r;
                            a[j]=r;
                        }
                    }
                }
            }
            else if (a[i]>r){
                int q=a[i]-r;
                a[i]=r;
                for(int j=0;j<n;j++){
                    if (j!=i){
                        if (a[j]-q>=l) {
                            a[j]-=q;
                            ans+=q;
                            q=0;
                            break;
                        }
                        else{
                            ans+=r-a[j]; 
                            q=q-a[j]+l;
                            a[j]=l;
                        }
                    }
                }
            }
        }
        cout<<ans<<endl;
    } 
    return 0;
} 

求思路


1
已采纳
陆麟瑞
陆麟瑞
资深天翼
资深天翼

其实不用那么复杂

贴核心代码:

for(int i=1; i<=n; i++)
    {
        cin>>a[i];
        sum+=a[i];
    }
    int x,y;
    cin>>x>>y;
    for(int i=1; i<=n; i++)
    if(a[i]<x) total1+=x-a[i];
    else if(a[i]>y) total2+=a[i]-y;
    if(sum/n<x||sum/n>y) cout<<-1;//判断是否满足题目条件
    else cout<<max(total1,total2);

 

0
0
李牧之
李牧之
新手光能
新手光能
#include<bits/stdc++.h>
using namespace std;
int a[101];
int main(){
    int n,x,y,total1,total2,sum;
    cin>>n;
    for(int i=1; i<=n; i++)
    {
        cin>>a[i];
        sum+=a[i];
    }
    cin>>x>>y;
    for(int i=1; i<=n; i++)
    if(a[i]<x) total1+=x-a[i];
    else if(a[i]>y) total2+=a[i]-y;
    if(sum/n<x||sum/n>y) cout<<-1;
    else cout<<max(total1,total2);
    return 0;
} 

只有40分了

0
王祥润
王祥润
新手守护
新手守护

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

 

cin>>a>>b>>c;

 

ys+=a;

 

es+=b;

 

ss+=c;

 

}

 

qs+=ys+es+ss;


 

核心代码

0
陆麟瑞
陆麟瑞
资深天翼
资深天翼

int n,x,y,total1,total2,sum;

改为

int n,x,y,total1=0,total2=0,sum=0;

我要回答