赛时思路是直接验证 bi=pti+qtn−i+1 的 p,q 唯一性,显然这是错的,因为没有考虑到必须满足 p≥q。
hack.in:
1
3
1 2 3
7 6 5
hack.out:
No
本人程序:
#include<bits/stdc++.h>
using namespace std;
int n,t[2005],b[2005];
void sol()
{
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*t[1]<=b[1];i++)
{
int x=b[1]-i*t[1];
if(x%t[n]) continue;
for(int j=2;j<=n;j++)
{
int p=b[j]-i*t[j];
if(p%t[n-j+1]||p/t[n-j+1]!=x/t[n]) goto pp;
}
puts("Yes");
return;
pp:;
}
puts("No");
}
int main()
{
int t;
cin>>t;
while(t--) sol();
return 0;
}
显然没有考虑到 p<q(即代码中的 x<p)的情况。
望加强。