Grid Coloring(AtCoder-2687)
Problem Description
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.
Example
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
題意:有一個?h*w 的區(qū)域,要在這些方格上涂 n 種顏色,第 i 種顏色涂 ai 個,對于每一種顏色,其涂得方塊均可以通過上下左右移動到達同種顏色的區(qū)域,即相同顏色涂得方塊是連通的,輸出一種涂色方法
思路:由于要求同種顏色是連通的,且任意輸出一種方法,那么從對于 h*w 個方格,從第一個開始從上到下走 S 型涂色即可
Source Program
#include<iostream> #include<cstdio> #include<cstdlib> #include<string> #include<cstring> #include<cmath> #include<ctime> #include<algorithm> #include<utility> #include<stack> #include<queue> #include<vector> #include<set> #include<map> #include<bitset> #define EPS 1e-9 #define PI acos(-1.0) #define INF 0x3f3f3f3f #define LL long long const int MOD = 1E9+7; const int N = 100+5; const int dx[] = {-1,1,0,0,-1,-1,1,1}; const int dy[] = {0,0,-1,1,-1,1,-1,1}; using namespace std;int a[N*N]; int G[N][N]; int main() {int h,w,n;scanf("%d%d",&h,&w);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%2) {for(int j=1; j<=w; j++) {if(a[cnt]==0) {cnt++;G[i][j]=cnt;a[cnt]--;}else if(a[cnt]>0) {G[i][j]=cnt;a[cnt]--;}}}else {for(int j=w; j>=1; j--) {if(a[cnt]==0) {cnt++;G[i][j]=cnt;a[cnt]--;}else if(a[cnt]>0) {G[i][j]=cnt;a[cnt]--;}}}}for(int i=1; i<=h; i++) {for(int j=1; j<=w; j++)printf("%d ",G[i][j]);printf("\n");}return 0; }?
總結(jié)
以上是生活随笔為你收集整理的Grid Coloring(AtCoder-2687)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pairs(HDU-5178)
- 下一篇: 信息学奥数一本通(1004:字符三角形)