80pts,17-20WA求助
查看原帖
80pts,17-20WA求助
582360
UniGravity楼主2023/10/6 12:01

感觉思路没错,可是为什么过不了?

#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;
}
2023/10/6 12:01
加载中...