line10一直显示answer too short找不到错
查看原帖
line10一直显示answer too short找不到错
223333
propitious楼主2024/5/7 23:42
#include <cstdio>
#include <iostream>
#include <string.h>
#include <algorithm> 
using namespace std;

long long t,n,x[100005],a[100005],b[100005],c[100005],a0,b0,c0,flag,sum1,sum2;
int main(){
	int t;
	cin>>t;
	for(int i=1;i<=t;i++) {
		a0=b0=c0=flag=0;
		cin>>n;
		memset(a,0,sizeof(a));
		memset(a,0,sizeof(b));
		memset(a,0,sizeof(c));
		
		for(int j=1;j<=n;j++) {
			cin>>x[j];
		}

		for(int j=1;j<=n;j++) {
			cin>>t;
			if(x[j] == 1) {
				a[++a0]=t;
				continue;
			}
			if(x[j] == 2) {
				b[++b0]=t;
				continue;
			}
			else {
				c[++c0]=t;
				continue;
			}
		} 
		sort(a+1,a+a0+1);
		sort(b+1,b+b0+1);
		sort(c+1,c+c0+1);
		
		sum1=0;
		for(int j=1;j<=8;j++) {
			cin>>t;
			sum1+=t;
		}

		for(int i=0;i<=1;i++) {
			if(flag == 1) break;
			for(int j=1;j<=3;j++) {
				if(flag == 1) break;
				if(b0 < i || c0 < j || a0 < 8-i-j) continue;
				sum2=0;
				for(int k=1;k<=i;k++) {
					sum2+=b[b0-k+1];
				}
				for(int k=1;k<=j;k++) {
					sum2+=c[c0-k+1];
				}
				for(int k=1;k<=8-i-j;k++) {
					sum2+=a[a0-k+1];
				}
				if(sum2+16>=sum1){
					flag=1;
				} 
			}
		}
		if(flag==1) cout<<"Yes"<<endl;
		else cout<<"No"<<endl;
	}
	return 0;
} 

2024/5/7 23:42
加载中...