考场思路,求大佬找错。
//思路
//若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;
}