Codeforces Round #575 (Div. 3)

https://codeforces.com/contest/1196

E - Connected Component on a Chessboard

题意:给一个黑白棋盘,左上角是白色格子,要求选出一个恰好 \(b\) 个黑色格子, \(w\) 个白色格子的连通区域。

题解:显然,最优的构造,是把少的那种颜色作为“核”,排成一列,然后把“核”相连的另一种颜色涂上,这样子充分利用了每个“核”。

queue<int>Q;
 
void test_case() {
    int b, w;
    scanf("%d%d", &b, &w);
    if(w > 3 * b + 1 || b > 3 * w + 1) {
        puts("NO");
        return;
    }
    while(!Q.empty())
        Q.pop();
    puts("YES");
    if(w >= b) {
        int j = 2;
        printf("2 %d\n", j);
        --w;
        while(b) {
            ++j;
            printf("2 %d\n", j);
            Q.push(j);
            --b;
            if(w) {
                ++j;
                printf("2 %d\n", j);
                --w;
            }
        }
        while(w) {
            int j = Q.front();
            Q.pop();
            printf("1 %d\n", j);
            --w;
            if(w) {
                printf("3 %d\n", j);
                --w;
            }
        }
    } else {
        int j = 2;
        printf("3 %d\n", j);
        --b;
        while(w) {
            ++j;
            printf("3 %d\n", j);
            Q.push(j);
            --w;
            if(b) {
                ++j;
                printf("3 %d\n", j);
                --b;
            }
        }
        while(b) {
            int j = Q.front();
            Q.pop();
            printf("2 %d\n", j);
            --b;
            if(b) {
                printf("4 %d\n", j);
                --b;
            }
        }
    }
}
posted @ 2020-02-15 00:55  KisekiPurin2019  阅读(88)  评论(0编辑  收藏  举报