AtCoder Regular Contest 080-D
来源:互联网 发布:泉州电视台直播软件 编辑:程序博客网 时间:2024/05/17 06:50
D - Grid Coloring
Time limit : 2sec / Memory limit : 256MB
Score : 400 points
Problem Statement
We have a grid with H rows and W columns of squares. Snuke is painting these squares in colors 1, 2, …, N. Here, the following conditions should be satisfied:
For each i (1≤i≤N), there are exactly ai squares painted in Color i. Here, a1+a2+…+aN=HW.
For each i (1≤i≤N), the squares painted in Color i are 4-connected. That is, every square painted in Color i can be reached from every square painted in Color i by repeatedly traveling to a horizontally or vertically adjacent square painted in Color i.
Find a way to paint the squares so that the conditions are satisfied. It can be shown that a solution always exists.
Constraints
1≤H,W≤100
1≤N≤HW
ai≥1
a1+a2+…+aN=HW
Input
Input is given from Standard Input in the following format:
H W
N
a1 a2 … aN
Output
Print one way to paint the squares that satisfies the conditions. Output in the following format:
c11 … c1W
:
cH1 … cHW
Here, cij is the color of the square at the i-th row from the top and j-th column from the left.
Sample Input 1
2 2
3
2 1 1
Sample Output 1
1 1
2 3
Below is an example of an invalid solution:
1 2
3 1
This is because the squares painted in Color 1 are not 4-connected.
Sample Input 2
3 5
5
1 2 3 4 5
Sample Output 2
1 4 4 4 3
2 5 4 5 3
2 5 5 5 3
Sample Input 3
1 1
1
1
Sample Output 3
1
题目大意: hw的方格,涂上1~n的颜色,第i中颜色途ai个,保证相同颜色连通,输出一种涂色方法。
解题思路:走S形
注意点:输出之间有空格,开始没注意/(ㄒoㄒ)/~~
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<set>using namespace std;typedef long long LL;const int INF=0x3f3f3f3f;const int MAXN=1e5+5;int a[MAXN];int G[105][105];int main(){ int h,w; while(scanf("%d%d",&h,&w)!=EOF) { int n; scanf("%d",&n); for(int i=1;i<=n;++i) scanf("%d",&a[i]); int cnt=1; for(int i=1;i<=h;++i) { if(i&1) { for(int j=1;j<=w;++j) { if(a[cnt]>0) {G[i][j]=cnt;--a[cnt];} else if(a[cnt]==0) {++cnt;G[i][j]=cnt;--a[cnt];} } }else { for(int j=w;j>=1;--j) { if(a[cnt]>0) {G[i][j]=cnt;--a[cnt];} else if(a[cnt]==0) {++cnt;G[i][j]=cnt;--a[cnt];} } } } for(int i=1;i<=h;++i) { for(int j=1;j<=w;++j) { if(j!=w) printf("%d ",G[i][j]); else printf("%d\n",G[i][j]); } } } return 0;}
- AtCoder Regular Contest 080-D
- AtCoder Regular Contest 080 C , D
- AtCoder Regular Contest 069 D
- AtCoder Regular Contest 073 D
- AtCoder Regular Contest 077-D
- AtCoder Regular Contest 078 D
- AtCoder Regular Contest 078 D
- AtCoder Regular Contest 078-D
- AtCoder Regular Contest 079-D
- AtCoder Regular Contest 079 D
- AtCoder Regular Contest 081 D
- AtCoder Regular Contest 068-D
- atcoder AtCoder Regular Contest 084 D
- AtCoder Regular Contest 080-C
- AtCoder Regular Contest 080 E
- AtCoder Regular Contest 080 E
- Atcoder Regular Contest 080 CDEF
- AtCoder Regular Contest 076 D Built?(kruskal)
- 148
- 1986-指定位置插入单词
- 鸟哥linux私房菜 随笔
- try-catch基础用法
- 关于AssetBundle打包的编辑器扩展
- AtCoder Regular Contest 080-D
- 网易2017春招笔试真题编程题集合--堆砖块
- Java语言与sikuli配合
- 【好东西要分享】大文本文件查看工具
- VS2013+openCV3.0置配【64位windows平台】
- kotlin 原生字符串输出三个引号
- hibernate(二)
- 高德地图——Android studio基础配置加载基本地图
- hive合并小文件