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 }

 

posted @ 2017-12-14 21:58  Ctfes  阅读(109)  评论(0编辑  收藏  举报