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 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.
思路:蛇形填数即可
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 }
作者:weeping
出处:www.cnblogs.com/weeping/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。