社区讨论

60玄关求调,必关!!!

P1109学生分组参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mlnewfhq
此快照首次捕获于
2026/02/15 15:16
4 天前
此快照最后确认于
2026/02/15 23:40
4 天前
查看原帖
测试点不该输出-1输出-1,但是我感觉判断条好像没错
CPP
#include<iostream>
#include<algorithm>
using namespace std;
long long n,m,a[60],l,r,mid1=-1,mid2=-1;
bool f1=1,f2=1;
int main(){
	cin>>n;
	int sum=0;
	for(int i=0;i<n;i++){
		cin>>a[i];
		sum+=a[i];
	}
	cin>>l>>r;
	sort(a,a+n);
	int bu1=0;
	int ge2=0,bu2=0;
	int ge3=0;
	//1.记录与边界差值 
	for(int i=0;i<n;i++){
		if(a[i]<l){
			bu1+=l-a[i];
		}else if(a[i]>=l&&a[i]<=r){
			ge2+=a[i]-l;
			bu2+=r-a[i];
		}else if(a[i]>r){
			ge3+=a[i]-r;
		}
	} 
//	cout<<"bu1  "<<bu1<<endl;
//	cout<<"ge2  "<<ge2<<"  bu2  "<<bu2<<endl;
//	cout<<"ge3  "<<ge3<<endl;
	if(bu1==ge3){
		cout<<bu1;
	}else if(bu1>ge3){//用第二段补 
		int sheng=bu1-ge3;
		if(sheng<=ge2) cout<<ge3+sheng;
		else cout<<-1;

	}else if(bu1<ge3){//去填第二段 
		int duo=ge3-bu1;
		if(duo<=bu2) cout<<bu1+duo;
		else cout<<-1;
	}
	return 0;
}
/*
5
50 10 20 20 5
15 30
*/ 

回复

2 条回复,欢迎继续交流。

正在加载回复...