20pts求助
查看原帖
20pts求助
690121
_cyh_楼主2023/10/10 21:07

考场思路,求大佬找错。

//思路 
//若x*_t+y*t=b 则可以 
#include<bits/stdc++.h>
using namespace std;
int a[2010],b[2010],t[2010],_t[2010],n;
int check();
int main(){
	int tt;cin>>tt;
	while(tt--){
		cin>>n;
		for(int i=1;i<=n;i++)cin>>t[i];
		for(int i=1;i<=n;i++)cin>>b[i];
		for(int i=1;i<=n;i++)_t[i]=t[i]+t[n-i+1];//算出t的回文 
		for(int i=1;true;i++){
			for(int j=1;j<=n;j++)//暴力枚举 y 
			a[j]=i*t[j]; 
			int flag=check();
			if(flag==0){
				cout<<"yes\n";
				break;
			}if(flag==2){
				cout<<"no\n";
				break;
			}
		}
	}return 0;
}int check(){
	//0:有解;2:无解 
	if(b[1]<a[1])return 2;//如果当前a已经大于b,则无解 
	if((b[1]-a[1])%_t[1]!=0)return 1;//如果a暂时无法通过加上a*_t得到b,继续枚举 
	int k=(b[1]-a[1])/_t[1];
	for(int i=1;i<=n;i++){
		if(b[i]<a[1])//同上 
		return 2;
		if(_t[i]*k!=b[i]-a[i])//同上 
		return 1;
	}return 0;
}
2023/10/10 21:07
加载中...