本文主要是介绍B - Black and White Gym - 100801B,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题意:
构造一个图使得黑色的四连通块为b个,白色四连通块为w个
思路:
只需要构造两行即可。
ACNEW
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <set>
#include <queue>
#include <map>
#include <string>
#include <iostream>
#include <cmath>using namespace std;
typedef long long ll;const int maxn = 1e4 + 7;
char s[maxn];
char a1[maxn],a2[maxn];int main() {freopen("black.in","r",stdin);freopen("black.out", "w", stdout);int b,w;scanf("%d%d",&b,&w);int n = max(b,w) * 2;for(int i = 1;i <= n;i++) {if(i & 1) a1[i] = '.'; //白色else a1[i] = '@';}if(b > w) {for(int i = 1;i <= (b - w) * 2 + 1;i++) {a2[i] = '.';}for(int i = (b - w) * 2 + 2;i <= n;i++) {a2[i] = a1[i];}printf("2 %d\n",n);for(int i = 1;i <= n;i++) printf("%c",a1[i]);printf("\n");for(int i = 1;i <= n;i++) printf("%c",a2[i]);} else if(b < w) {for(int i = n;i >= n - (w - b) * 2;i--) {a2[i] = '@';}for(int i = n - (w - b) * 2 - 1;i >= 1;i--) {a2[i] = a1[i];}printf("2 %d\n",n);for(int i = 1;i <= n;i++) printf("%c",a1[i]);printf("\n");for(int i = 1;i <= n;i++) printf("%c",a2[i]);} else {printf("1 %d\n",n);for(int i = 1;i <= n;i++) {printf("%c",a1[i]);}}return 0;
}
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <map>using namespace std;int main() {freopen("black.in","r",stdin);freopen("black.out","w",stdout);int b,w;scanf("%d%d",&b,&w);if(b == 1) {printf("%d %d\n",2,w * 2);for(int i = 1;i <= w * 2;i++) {printf("@");}printf("\n");for(int i = 1;i <= w;i++) {printf("@.");}}else if(w == 1) {printf("%d %d\n",2,b * 2);for(int i = 1;i <= b * 2;i++) {printf(".");}printf("\n");for(int i = 1;i <= b;i++) {printf(".@");}printf("\n");}else {printf("%d %d\n",2,(w + b - 2) * 2);for(int i = 1;i <= (w - 1) * 2;i++) {printf("@");}for(int i = 1;i <= (b - 1) * 2;i++) {printf(".");}printf("\n");for(int i = 1;i <= (w - 1);i++) {printf("@.");}for(int i = 1;i <= b - 1;i++) {printf("@.");}printf("\n");}return 0;
}
这篇关于B - Black and White Gym - 100801B的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!