zoukankan      html  css  js  c++  java
  • AtCoder Grand Contest 016 C

    C - +/- Rectangle


    Time limit : 2sec / Memory limit : 256MB

    Score : 700 points

    Problem Statement

    You are given four integers: HWh and w (1≤hH1≤wW). Determine whether there exists a matrix such that all of the following conditions are held, and construct one such matrix if the answer is positive:

    • The matrix has H rows and W columns.
    • Each element of the matrix is an integer between −109 and 109 (inclusive).
    • The sum of all the elements of the matrix is positive.
    • The sum of all the elements within every subrectangle with h rows and w columns in the matrix is negative.

    Constraints

    • 1≤hH≤500
    • 1≤wW≤500

    Input

    Input is given from Standard Input in the following format:

    H W h w
    

    Output

    If there does not exist a matrix that satisfies all of the conditions, print No.

    Otherwise, print Yes in the first line, and print a matrix in the subsequent lines in the following format:

    a11  a1W
    :
    aH1  aHW
    

    Here, aij represents the (ij) element of the matrix.


    Sample Input 1

    Copy
    3 3 2 2
    

    Sample Output 1

    Copy
    Yes
    1 1 1
    1 -4 1
    1 1 1
    

    The sum of all the elements of this matrix is 4, which is positive. Also, in this matrix, there are four subrectangles with 2 rows and 2 columns as shown below. For each of them, the sum of all the elements inside is −1, which is negative.

    bbdb651fa1f05996886da9f0c4d8090a.png

    Sample Input 2

    Copy
    2 4 1 2
    

    Sample Output 2

    Copy
    No
    

    Sample Input 3

    Copy
    3 4 2 3
    

    Sample Output 3

    Copy
    Yes
    2 -5 8 7
    3 -5 -4 -5
    2 1 -1 7

    炒鸡麻烦的一道题,wa了无数次。思路是...额,不知道怎么说。
    a1,a2分别代表大矩阵和小矩阵填正整数的格子数量,b1,b2分别代表大矩阵和小矩阵填负整数的格子数量。
    ta,tb分别代表所填的正整数和负整数。
    对于小矩阵来说a1*ta+b1*tb<=-1
    对于大矩阵来说a2*ta+b2*tb>=1,那么假设
    a1*ta+b1*tb=-(a2*ta+b2*tb),求解ta,tb。
    特判1,特判1,特判1。
    
    
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<iostream>
    #include<queue>
    #include<map>
    #include<cmath>
    #include<set>
    #include<stack>
    #define ll long long
    #define pb push_back
    #define max(x,y) ((x)>(y)?(x):(y))
    #define min(x,y) ((x)>(y)?(y):(x))
    #define cls(name,x) memset(name,x,sizeof(name))
    using namespace std;
    const int inf=1e9+10;
    const ll llinf=1e16+10;
    const int maxn=5e2+10;
    const int maxm=2e5+10;
    const int mod=1e9+7;
    const double pi=acos(-1.0);
    int H,W,h,w;
    int ans[maxn][maxn];
    int main()
    {
        //freopen("in.txt","r",stdin);
        while(~scanf("%d %d %d %d",&H,&W,&h,&w))
        {
            if(H%h==0&&W%w==0)
            {
                printf("No
    ");
                continue;
            }
            else printf("Yes
    ");
            int a1,b1,a2,b2;
            if(h==1||w==1) a1=1;
            else a1=(h+w-1);
            b1=h*w-a1;
            a2=0;
            for(int i=0;i<H;i++)
                for(int j=0;j<W;j++)
                if((i%h==0&&h!=1)||(j%w==0)&&w!=1) a2++;
            b2=H*W-a2;
            int ta=b1+b2;
            int tb=-(a1+a2);
            for(int i=0;i<H;i++)
            {
                for(int j=0;j<W;j++)
                {
                    if((i%h==0&&h!=1)||(j%w==0&&w!=1))
                        printf("%d",ta);
                    else printf("%d",tb);
                    if(j==W-1) printf("
    ");
                    else printf(" ");
                }
            }
        }
        return 0;
    }
    
    
    
     
     
  • 相关阅读:
    【BZOJ 1598】 牛跑步
    【SDOI 2010】 魔法猪学院
    【POJ 2449】 Remmarguts' Date
    【HDU 3085】 Nightmare Ⅱ
    【POJ 3635】 Full Tank
    【POJ 2230】 Watchcow
    USB设备驱动总结
    经典SQL语句大全
    float型数据与字节数组的转化
    linux下dmesg命令详解
  • 原文地址:https://www.cnblogs.com/mgz-/p/7131151.html
Copyright © 2011-2022 走看看