Grid Coloring

xiaoxiao2021-02-28  92

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

#include<stdio.h> int a[105][105],b[10000+50]; int main () { int h,w; while(scanf("%d %d",&h,&w)!=EOF) { int i,j,t,k=0; scanf("%d",&t); for(i=0;i<t;i++) scanf("%d",&b[i]); for(i=0;i<h;i++) { if(i%2==0) for(j=0;j<w;j++) { a[i][j]=k+1; b[k]--; if(b[k]==0) k++; } if(i%2==1) for(j=w-1;j>=0;j--) { a[i][j]=k+1; b[k]--; if(b[k]==0) k++; } } for(i=0;i<h;i++) { for(j=0;j<w-1;j++) printf("%d ",a[i][j]); printf("%d\n",a[i][w-1]); } } }

转载请注明原文地址: https://www.6miu.com/read-74326.html

最新回复(0)