Skip to content
On this page

a63_q1b_virus2.c

c
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>

inline int qsrange(int* arr, int start, int end) {
    return arr[end] - arr[start];
}

bool isvirus(int* qs, int start, int end) {
    if (end - start <= 2) {
        return true;
    }

    int mid = (start + end) / 2;
    if (abs(qsrange(qs, start, mid) - qsrange(qs, mid, end)) > 1) {
        return false;
    }

    return isvirus(qs, start, mid) && isvirus(qs, mid, end);
}

int main(void) {
    int n, k;
    scanf("%d %d", &n, &k);

    int virus_size = 1 << k;
    int arr[1 << 16];
    int qs[1 << 16];
    qs[0] = 0;

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < virus_size; j++) {
            scanf("%d", &arr[j]);
            qs[j + 1] = qs[j] + arr[j];
        }

        printf("%s\n", isvirus(qs, 0, virus_size) ? "yes" : "no");
    }
}

See on GitHub

Last Updated: 1/2/2567 12:34:22 (UTC+7)

Released under the MIT License