• Atcoder C


    题目链接:http://agc016.contest.atcoder.jp/tasks/agc016_c

    题解:挺简单的构造,很容易想到的构造方法就是(h*w)的小矩阵里其他值赋值为1,最后一个赋值为(h*w)。这只是最基础的构造,然后

    判断count - (H * W - count) * (h * w - 1)(count表示基础构造后正数的个数)是否大于0,如果大于0都可以构造,怎么构造就是将正的不断+1,负的不断-(h*w-1)

    就行。如果小于等于0就要看初始的sum值(sum表示基础构造后全部数的和)如果sum大于0就行,否则不能构造。

    #include <iostream>
    #include <cstring>
    using namespace std;
    const int M = 5e2 + 10;
    int mmp[M][M] , ans[M][M];
    int main() {
        int H , W , h , w;
        cin >> H >> W >> h >> w;
        for(int i = 1 ; i <= H ; i++) {
            for(int j = 1 ; j <= W ; j++) {
                ans[i][j] = 1;
            }
        }
        for(int i = 1 ; i <= H ; i++) {
            if(i % h == 0) {
                for(int j = 1 ; j <= W ; j++) {
                    if(j % w == 0) {
                        ans[i][j] = -(h * w);
                    }
                }
            }
        }
        int count = 0 , cnt = 0;
        for(int i = 1 ; i <= H ; i++) {
            for(int j = 1 ; j <= W ; j++) {
                if(ans[i][j] > 0) count++;
                cnt += ans[i][j];
            }
        }
        if(count - (H * W - count) * (h * w - 1) <= 0 && cnt <= 0) cout << "No" << endl;
        else {
            cout << "Yes" << endl;
            int sum = 0;
            for(int i = 1 ; i <= H ; i++) {
                for(int j = 1 ; j <= W ; j++) {
                    sum += ans[i][j];
                }
            }
            int num1 = count , num2 = H * W - count;
            int dif = num1 - num2 * (h * w - 1);
            if(sum <= 0) {
                int gg = -sum;
                int ad = gg / dif + 1;
                for(int i = 1 ; i <= H ; i++) {
                    for(int j = 1 ; j <= W ; j++) {
                        if(ans[i][j] > 0) ans[i][j] += ad;
                        else ans[i][j] -= ad * (h * w - 1);
                    }
                }
            }
            for(int i = 1 ; i <= H ; i++) {
                for(int j = 1 ; j <= W ; j++) {
                    cout << ans[i][j] << ' ';
                }
                cout << endl;
            }
        }
        return 0;
    }
    
  • 相关阅读:
    JS中location.search和setTimeout()和 setInterval()
    javascript的AJAX和Serialize(),解码
    php的变量和基本语法
    isnan
    Urllib 库的基础和实用(2)
    urllib 库的基础和实用(1)
    python获取网页精准爬取数据
    eclipse配置
    搭建JAVA WEB开发环境(tomcat)
    JDK环境变量配置
  • 原文地址:https://www.cnblogs.com/TnT2333333/p/7061268.html
Copyright © 2020-2023  润新知