AtCoder Regular Contest 080 D - Grid Coloring

地址:http://arc080.contest.atcoder.jp/tasks/arc080_b

题目:

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 12N. Here, the following conditions should be satisfied:

  • For each i (1≤iN), there are exactly ai squares painted in Color i. Here, a1+a2+…+aN=HW.
  • For each i (1≤iN), 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≤NHW
  • 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.

 

思路:蛇形填数即可

 1 #include <bits/stdc++.h>
 2  
 3 using namespace std;
 4  
 5 #define MP make_pair
 6 #define PB push_back
 7 typedef long long LL;
 8 typedef pair<int,int> PII;
 9 const double eps=1e-8;
10 const double pi=acos(-1.0);
11 const int K=1e6+7;
12 const int mod=1e9+7;
13  
14 int r,c,n,x,y,ans[200][200];
15  
16 int main(void)
17 {
18     scanf("%d%d%d",&r,&c,&n);
19     x=1,y=1;
20     for(int i=1,cnt;i<=n;i++)
21     {
22         scanf("%d",&cnt);
23         while(cnt--)
24         {
25             ans[x][y]=i;
26             if(y==c&&x%2==1)
27                 y=c,x++;
28             else if(y==1&&x%2==0)
29                 y=1,x++;
30             else if(x&1)
31                 y++;
32             else
33                 y--;
34         }
35     }
36     for(int i=1;i<=r;i++)
37     for(int j=1;j<=c;j++)
38         printf("%d%c",ans[i][j],j==c?'\n':' ');
39     return 0;
40 }

 

posted @ 2017-08-07 00:42  weeping  阅读(454)  评论(0编辑  收藏  举报