35 pts 求助
查看原帖
35 pts 求助
917025
XYzero楼主2023/10/6 20:56
#include<bits/stdc++.h>
using namespace std;
const int N = 2e3 + 10;
int t[N];
int b[N];
bool add(int x[],int n){
	for(int i = 1;i <= n;i++){
		if(b[i] - x[i] < 0){
			return 0;
		}
	}
	return 1;
}
int main(){
	int t1;
	scanf("%d",&t1);
	while(t1--){
		int n;
		scanf("%d",&n);
		
		for(int i = 1;i <= n;i++){
			cin >> t[i];
		}
		for(int i = 1;i <= n;i++){
			cin >> b[i];
		}
		int tmp[N];
		memset(tmp,0,sizeof(tmp));
		
		int num = n;
		for(int i = 1;i <= n;i++){
			tmp[i] = t[i] + t[num];
			num--;
		}
		bool flg = 0;
		for(int i = 1;i <= n;i++){
			if(b[i] < tmp[i]){
				flg = 1;
				break;
			}
		}
		if(flg == 1){
			bool flg2 = 0;
			int shu;
			for(int i = 1;i <= n;i++){
				if(b[i] % t[i] == 0){
					if(i == 1){
						continue;
					}
					else{
						if(b[i] / t[i] != shu){
							flg2 = 1;
							break;
						}
						shu = b[i] / t[i];
					}
				}
				else {
					flg2 = 1;
					break;
				}
			}
			if(flg2){
				puts("NO");
			}
			else{
				puts("YES");
			}
		}
		else{
			bool flg3 = 0;
			bool flg4 = 0;
			int num = 0;
			while(1){
				if(!add(tmp,n))break;
				for(int i = 1;i <= n;i++){
				b[i] -= tmp[i];//587
				
				if(b[i] == 0){
				
					num++;
			   }  
			}
			if(num == n){
				puts("YES");
				flg4 = 1;
				break;
			}
		    }
		    if(flg4)continue;
		    	int num2 = 0;
		    	bool flg5 = 0;
		    	bool flg6 = 0;
		    	while(1){
		    	if(!add(t,n))break;
				for(int i = 1;i <= n;i++){
				b[i] -= t[i];
				if(b[i] == 0){
					num2++;
			    }  
			    }
			    if(num2 == n){
				puts("YES");
				flg6 = 1;
				break;
			    }
			    if(flg5)break;
		    }
		    if(flg6)continue;
		    puts("NO");
		    
				
			  
		    
		}
	}
	
	return 0;
}
2023/10/6 20:56
加载中...