UVa 1605 - Building for UN
链接:
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4480
题意:
你的任务是设计一个包含若干层的联合国大楼,其中每层都是一个等大的网格。有若干国家需要在联合国大楼里办公,
你需要把每个格子都分配给其中一个国家,使得任意两个不同的国家都有一对相邻的格子(要么是同层中相邻的格子,要么是相邻层的同一个格子),
一个国家可以有多个相互连通的格子。你设计的大厦最多不能超过1000000个格子。
输入国家的个数n(n≤50),输出大楼的层数H、每层楼的行数W和列数L,然后是每层楼的平面图。不同国家用不同的大小写字母表示。
分析:
构造法。对于每个n都这样设计即可:
一共只有两层,每层都是 n*n 的,第一层第i行全是国家i,第二层第j列全是国家j。
代码:
1 #include <cstdio> 2 3 int main(){ 4 const char s[52+5] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; 5 int T = 0, n; 6 while(~scanf("%d", &n)){ 7 if(T++) printf("\n"); 8 printf("2 %d %d\n", n, n); 9 for(int t = 0; t < n; t++){ 10 for(int i = 0; i < n; i++) printf("%c", s[t]); 11 printf("\n"); 12 } 13 printf("\n"); 14 for(int t = 0; t < n; t++){ 15 for(int i = 0; i < n; i++) printf("%c", s[i]); 16 printf("\n"); 17 } 18 } 19 return 0; 20 }