• AtCoder Regular Contest 080 D


    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.


    Sample Input 1

    Copy
    2 2
    3
    2 1 1
    

    Sample Output 1

    Copy
    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

    Copy
    3 5
    5
    1 2 3 4 5
    

    Sample Output 2

    Copy
    1 4 4 4 3
    2 5 4 5 3
    2 5 5 5 3
    

    Sample Input 3

    Copy
    1 1
    1
    1
    

    Sample Output 3

    Copy
    1

    要求输出一种满足条件的情况,那就一行一行的涂色,涂到最后一个格子紧接着从下一行相邻的格子开始倒着涂,如此进行。
    代码:
    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    int h,w,n,num[10000];
    int main() {
        int cnt = 1;
        scanf("%d%d",&h,&w);
        scanf("%d",&n);
        for(int i = 0;i < n;i ++) {
            scanf("%d",&num[i]);
        }
        for(int i = 0;i < h;i ++) {
            while(!num[cnt - 1]) cnt ++;
            string s = to_string(cnt);
            num[cnt - 1] --;
            for(int j = 1;j < w;j ++) {
                while(!num[cnt - 1]) cnt ++;
                s = i % 2 ? (to_string(cnt) + " " + s) : (s + " " + to_string(cnt));
                num[cnt - 1] --;
            }
            cout<<s<<endl;
        }
        return 0;
    }
  • 相关阅读:
    货币转换函数:CURRENCY_CONVERTING_FACTOR
    Function程序设计及应用
    工具栏对象GUI Status 与GUI Title
    Message的定义類型
    Report List 报表开发
    SpringMVC构建Restful。
    Redis主从复制
    转:Redis配置文件详解
    Redis入门学习
    Redis开启远程登录连接。
  • 原文地址:https://www.cnblogs.com/8023spz/p/10864630.html
Copyright © 2020-2023  润新知