spj 公示,欢迎挑错

Star 2022-09-13 20:28:36 2022-09-13 20:30:24

spj_c.c

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

int change(unsigned long long *p, int i, int mod) {
    if (*p & 1 << i) return 0;
    *p ^= 1 << i;
    *p ^= 1 << (i + 1) % mod;
    *p ^= 1 << (i - 1 + mod) % mod;
    return 1;
}

int main() {
    FILE *input = fopen("input", "r");
    FILE *user_out = fopen("user_out", "r");
    unsigned long long state = 0;
    int i, n;
    fscanf(input, "%d", &n);
    for (i = 0; i < n; ++i) {
        int t;
        fscanf(input, "%d", &t);
        state ^= t * 1 << i;
    }
    while (fscanf(user_out, "%d", &i) != EOF) {
        if (!change(&state, i, n)) {
            printf("0\n");
            fprintf(stderr, "Invalid operation.\n");
            return 0;
        }
    }
    if (state == (1 << n) - 1) {
        printf("100\n");
        fprintf(stderr, "Congratulations!\n");
    }
    else {
        printf("0\n");
        fprintf(stderr, "Wrong answer.\n");
    }
    return 0;
}