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 }
时间: 2024-11-02 23:53:09

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 (联合国大楼)

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

UVA 11636 Hello World,LA 3602 DNA Consensus String,UVA 10970 Big Chocolate,UVA 10340 All in All,UVA 11039 Building Designing

课程好紧啊,只能刷点水题了,几乎都是贪心. UVA 11636 Hello World 二的幂答案就是二进制长度减1,不是二的幂答案就是是二进制长度. #include<cstdio> int main() { int n,kas = 0; while(scanf("%d",&n),n>0){ int r = 0; for(n--;n;n>>=1) r++; printf("Case %d: %d\n",++kas,r); }

uva 11039 Building designing (排序)

uva 11039 Building designing An architect wants to design a very high building. The building will consist of some floors, and each floor has a certain size. The size of a floor must be greater than the size of the floor immediately above it. In addit

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][max

UVA 11039 Building designing 贪心

题目链接:UVA - 11039 题意描述:建筑师设计房子有两条要求:第一,每一层楼的大小一定比此层楼以上的房子尺寸要大:第二,用蓝色和红色为建筑染色,每相邻的两层楼不能染同一种颜色.现在给出楼层数量和每层楼的尺寸(楼层尺寸的大小没有按照顺序给出),求出满足这样要求的最大楼层数. 算法分析:把楼层尺寸按照从大到小排序,然后遍历一次的同时记录相邻楼层所染颜色不同,把不满足要求的楼层去掉即可. 1 #include<iostream> 2 #include<cstdio> 3 #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 - Building designing

题目:有n个绝对值不为0的数字,从中找到一个序列,正负交替,绝对值递增,求序列最大长度. 分析:dp,动态规划.因为绝对值要递增,所以先按绝对值排序. 设前k个数组成大的序列最长为f(k),则有如下地推关系: f(k)= f(k-1)        { data[k]*data[k-1] > 0,最后量元素不同时取 } = f(k-1)+ 1  { data[k]*data[k-1] < 0,最后量元素同时取 } (所有数据均不相同,且不为零) 说明:(⊙v⊙). #include <a