top1编程
← 返回题目
题解

【提高】黑白无常

1 条题解

  • 0
    @ 2026-7-29 0:17:54
    #include <stdio.h>
     
    #define BLACK 0
    #define WHITE 1
     
    int n;
    int x[10], y[10];
    int slip[10];
     
    int solve(int person_id)
    {
        if (person_id > 0)
        {
            slip[person_id] = BLACK;
            if (solve(person_id - 1))
                return 1;
     
            slip[person_id] = WHITE;
            return solve(person_id - 1);
        }
        else
        {
            int n_black = 0, n_white = 0;
            for (int i = 1; i <= n; ++i)
            {
                if (slip[i] == BLACK)
                    n_black++;
                else
                    n_white++;
            }
     
            for (int i = 1; i <= n; ++i)
            {
                if (slip[i] == WHITE)
                {
                    if (!(x[i] == n_white - 1 && y[i] == n_black))
                        return 0;
                }
                else
                {
                    if (x[i] == n_white && y[i] == n_black - 1)
                        return 0;
                }
            }
     
            return 1;
        }
    }
     
    int main()
    {
        scanf("%d", &n);
        for (int i = 1; i <= n; ++i)
            scanf("%d %d", &x[i], &y[i]);
     
        if (solve(n))
        {
            int n_black = 0, n_white = 0;
            for (int i = 1; i <= n; ++i)
            {
                if (slip[i] == BLACK)
                    n_black++;
                else
                    n_white++;
            }
     
            if (n_black == n)
                printf("0");
            else
            {
                for (int i = 1; i <= n; ++i)
                {
                    if (slip[i] == WHITE)
                        printf("%d", i);
                }
            }
        }
        else
            printf("NoSolution.");
     
        return 0;
    }
    
    • 1