感觉思路没错,可是为什么过不了?
#include <bits/stdc++.h>
#define int unsigned long long
using namespace std;
int T;
int n;
int t[2005], t2[2005];
int b[2005];
int a[2005];
bool check() {
bool flag = true;
for (int i = 1; i <= n; i++) {
if (a[i] != b[i]) {
flag = false;
break;
}
}
if (flag) return true;
int k = 0;
for (int i = 1; i <= n; i++) {
if ((b[i] - a[i]) % t2[i] != 0) return false;
if (k == 0) k = (b[i] - a[i]) / t2[i];
else if (k != (b[i] - a[i]) / t2[i]) return false;
}
return true;
}
void work() {
scanf("%llu", &n);
for (int i = 1; i <= n; i++) {
scanf("%llu", &t[i]);
}
for (int i = 1; i <= n; i++) {
scanf("%llu", &b[i]);
t2[i] = t[i] + t[n - i + 1];
}
memset(a, 0, sizeof(a));
bool flag = false;
if (check()) {
printf("Yes\n");
return;
}
while (true) {
bool f1 = 0;
for (int j = 1; j <= n; j++) {
a[j] += t[j];
if (a[j] > b[j]) {
f1 = true;
break;
}
}
if (f1) break;
if (check()) {
printf("Yes\n");
flag = true;
break;
}
}
if (!flag) printf("No\n");
}
signed main() {
scanf("%llu", &T);
while (T--) work();
return 0;
}