UVa 1605 (构造) Building for UN

题意:

有n个国家,要设计一栋长方体的大楼,使得每个单位方格都属于其中一个国家,而且每个国家都要和其他国家相邻。

分析:

紫书上有一种很巧妙的构造方法:

一共有2层,每层n×n。一层是每行一个国家,另一层是每列一个国家。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 using namespace std;
 5
 6 const int maxn = 50;
 7 char b[2][maxn][maxn];
 8
 9 char ToChar(int x)
10 {
11     if(x < 26) return ‘a‘ + x;
12     else return ‘A‘ + x - 26;
13 }
14
15 int main()
16 {
17     int n;
18     while(scanf("%d", &n) == 1)
19     {
20         printf("2 %d %d\n", n, n);
21         for(int i = 0; i < n; ++i)
22         {
23             char c = ToChar(i);
24             memset(b[0][i], c, sizeof(b[0][i]));
25             for(int j = 0; j < n; ++j) b[1][j][i] = c;
26         }
27
28         for(int h = 0; h < 2; ++h)
29         {
30             for(int i = 0; i < n; ++i)
31             {
32                 for(int j = 0; j < n; ++j)
33                     putchar(b[h][i][j]);
34                 puts("");
35             }
36             if(!h) puts("");
37         }
38     }
39
40     return 0;
41 }

代码君

时间: 2024-10-07 05:46:13

UVa 1605 (构造) Building for UN的相关文章

(白书训练计划)UVa 1605 Building for UN(构造法)

题目地址:UVa 1605 一道答案特判的题.最简单的方法是只构造两层,第一层中第i行全是i国家,第二层中第i列全是i国家.这样就保证了所有的国家都会相邻. 代码如下: #include <iostream> #include <cstdio> #include <string> #include <cstring> #include <stdlib.h> #include <math.h> #include <ctype.h&

uva 1605 building for UN ——yhx

The United Nations has decided to build a new headquarters in Saint Petersburg, Russia. It will have aform of a rectangular parallelepiped and will consist of several rectangular oors, one on top of another.Each oor is a rectangular grid of the same

UVa 1605 - Building for UN

链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4480 题意: 你的任务是设计一个包含若干层的联合国大楼,其中每层都是一个等大的网格.有若干国家需要在联合国大楼里办公,你需要把每个格子都分配给其中一个国家,使得任意两个不同的国家都有一对相邻的格子(要么是同层中相邻的格子,要么是相邻层的同一个格子),一个国家可以有多个相互连通的格子

UVA - 1605 Building for UN (联合国大楼)

题意:一个联合国大楼每层都有数量相等大小相同的格子,将其分配给n个国家,使任意两个不同的国家都相邻(同层有公共边或相邻层的同一个格子). 分析:可以设计一个只有两层的大楼,第一层每个国家占一行,第二层每个国家占一列,即每层都是n*n的. #pragma comment(linker, "/STACK:102400000, 102400000") #include<cstdio> #include<cstring> #include<cstdlib>

uva 1605

构造法,,,,hahaha #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int n; char bb[60]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; int main() { while(~scanf("%

UVa 120 (构造) Stacks of Flapjacks

这题求解的过程和选择排序非常相似. 反转的过程中分为无序(在前面)和有序(在后面)两个部分,一开始视为全部为无序. 在无序部分中找到最大的元素,先把它翻到最前面,然后再反转到无序部分的最后面.这样该元素就成为有序的部分. 而且在算法执行的过程中不会影响到已经构造好的有序部分. 1 #include <iostream> 2 #include <string> 3 #include <sstream> 4 #include <algorithm> 5 #inc

UVa 1605 联合国大楼

https://vjudge.net/problem/UVA-1605 题意:有n个国家,要求设计一栋楼并为这n个国家划分房间,要求国家的房间必须连通,且每两个国家之间必须有一间房间是相邻的. 思路:乍一看很难的样子,但真的是很简单.一共只要两层,每层都是n*n的,第一层第i行全是国家i,第二层第j列全是国家j. 但是如果不是这样做的话好像还是挺难的. 1 #include<iostream> 2 #include<algorithm> 3 #include<string&g

UVA - 11039 B - Building designing

https://odzkskevi.qnssl.com/516b2b3ad824ada50248f23d20f53083?v=1502089438 1 /* 2 n个绝对值各不相同的非0整数,选出尽量多的数,排成一个序列,使得正负号交替且绝对值递增 3 */ 4 #include <iostream> 5 #include <string.h> 6 #include <stdio.h> 7 #include <algorithm> 8 using names

《算法竞赛入门经典》之“算法设计与优化策略”

一.构造法 UVA 120 Stacks of Flapjacks Time Limit: 3000MS     64bit IO Format: %lld & %llu Submit Status uDebug Description Background Stacks and Queues are often considered the bread and butter of data structures and find use in architecture, parsing, op