Codeforces Round #487 (Div. 2) C - A Mist of Florescence
阿新 • • 發佈:2018-06-12
至少 pan mes info enter test pre -- img
傳送門:http://codeforces.com/contest/989/problem/C
這是一個構造問題。
構造一張網格,網格中的字符為’A’、’B’、’C’、’D’,並且其連通塊的個數分別為a、b、c、d。
首先我們可以考慮兩種顏色的情形:
構造一張網格,網格中的字符為’0’、’1’,並且其連通塊的個數分別為a、b,其中a、b均為正整數。於是,至少為’0’、’1’分別構造一個連通塊;再分別以連通塊為“網”,植入’1’、’0’,植入時應保證植入的點互不連通。如下圖所示:
以上構造法可以推廣至四種顏色的情況。如下圖所示:
參考程序如下:
#include <bits/stdc++.h> usingnamespace std; char g[50][50]; int main(void) { int a, b, c, d; cin >> a >> b >> c >> d; cout << 50 << " " << 50 << endl; for (int i = 0; i < 25; i++) { for (int j = 0; j < 25; j++) g[i][j] = ‘A‘; for (int j = 25; j < 50; j++) g[i][j] = ‘B‘; } for (int i = 25; i < 50; i++) { for (int j = 0; j < 25; j++) g[i][j] = ‘C‘; for (int j = 25; j < 50; j++) g[i][j] = ‘D‘; } a--; b--; c--; d--; int x, y; x = 1; y = 1; while (d) { g[x][y] = ‘D‘; y += 2;if (y >= 25) { y = 1; x += 2; } d--; } x = 1; y = 26; while (c) { g[x][y] = ‘C‘; y+= 2; if (y >= 50) { y = 26; x += 2; } c--; } x = 26; y = 1; while (b) { g[x][y] = ‘B‘; y += 2; if (y >= 25) { y = 1; x += 2; } b--; } x = 26; y = 26; while (a) { g[x][y] = ‘A‘; y += 2; if (y >= 50) { y = 26; x += 2; } a--; } for (int i = 0; i < 50; i++) { for (int j = 0; j < 50; j++) putchar(g[i][j]); putchar(‘\n‘); } }
Codeforces Round #487 (Div. 2) C - A Mist of Florescence