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;
}
}
}
}