求指点 样例能过但是测试点全错
查看原帖
求指点 样例能过但是测试点全错
1138102
chyh022楼主2023/11/14 23:27

请问是代码过于冗长的原因吗

#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(int x,int y){
	return x>y;
}
int main(){
	int A[25],B[25],C[25],D[25];
	int a,b,c,d;
	cin>>a>>b>>c>>d;
	int i;
	for(i=1;i<=a;i++){//输入每一个习题集中每一道题的时间 
		cin>>A[i];
	}
	for(i=1;i<=b;i++){
		cin>>B[i];
	}
	for(i=1;i<=c;i++){
		cin>>C[i];
	}
	for(i=1;i<=d;i++){
		cin>>D[i];
	}
	int sum=0,sumA=0,sumA1=0,sumA2=0,sumB=0,sumB1=0,sumB2=0,sumC=0,sumC1=0,sumC2=0,sumD=0,sumD1=0,sumD2=0;
	if(a==1){//求第一个习题集需要的时间 
		sumA=A[1];
	}else if(a%2==0){//偶数个的情况
		sort(A+1,A+a+1,cmp);
		for(i=1;i<=a-1;i+=2){
			sumA1+=A[i];
			sumA2+=A[i+1];
		}
		sumA=max(sumA1,sumA2);
	}else if(a!=1&&a%2==1){//奇数个的情况
		sort(A+1,A+a+1,cmp);
		for(i=1;i<=a-2;i+=2){
			sumA1+=A[i];
			sumA2+=A[i+1];
		}
		if(A[a]>fabs(sumA1-sumA2)){
			sumA=max(sumA1,sumA2)+A[a]-fabs(sumA1-sumA2);
		}else{
			sumA=max(sumA1,sumA2);
		}
	}
	if(b==1){//第二个习题集时间 
		sumB=B[1];
	}else if(b%2==0){
		sort(B+1,B+b+1,cmp);
		for(i=1;i<=b-1;i+=2){
			sumB1+=B[i];
			sumB2+=B[i+1];
		}
		sumB=max(sumB1,sumB2);
	}else if(b!=1&&b%2==1){
		sort(B+1,B+b+1,cmp);
		for(i=1;i<=b-2;i+=2){
			sumB1+=B[i];
			sumB2+=B[i+1];
		}
		if(B[b]>fabs(sumB1-sumB2)){
			sumB=max(sumB1,sumB2)+B[b]-fabs(sumB1-sumB2);
		}else{
			sumB=max(sumB1,sumB2);
		}
	}
	if(c==1){//第三个习题集 
		sumC=C[1];
	}else if(c%2==0){
		sort(C+1,C+c+1,cmp);
		for(i=1;i<=c-1;i+=2){
			sumC1+=C[i];
			sumC2+=C[i+1];
		}
		sumC=max(sumC1,sumC2);
	}else if(c!=1&&c%2==1){
		sort(C+1,C+c+1,cmp);
		for(i=1;i<=c-2;i+=2){
			sumC1+=C[i];
			sumC2+=C[i+1];
		}
		if(C[c]>fabs(sumC1-sumC2)){
			sumC=max(sumC1,sumC2)+C[c]-fabs(sumC1-sumC2);
		}else{
			sumC=max(sumC1,sumC2);
		}
	}
	if(d==1){//第四个习题集 
		sumD=D[1];
	}else if(d%2==0){
		sort(D+1,D+d+1,cmp);
		for(i=1;i<=d-1;i+=2){
			sumD1+=D[i];
			sumD2+=D[i+1];
		}
		sumD=max(sumD1,sumD2);
	}else if(d!=1&&d%2==1){
		sort(D+1,D+d+1,cmp);
		for(i=1;i<=d-2;i+=2){
			sumD1+=D[i];
			sumD2+=D[i+1];
		}
		if(D[d]>fabs(sumD1-sumD2)){
			sumD=max(sumD1,sumD2)+D[d]-fabs(sumD1-sumD2);
		}else{
			sumD=max(sumD1,sumD2);
		}
	}
	sum=sumA+sumB+sumC+sumD;
	cout<<sum<<endl;
	return 0;
}
2023/11/14 23:27
加载中...