2020ICPC·小米 网络选拔赛第一场 J-Matrix Subtraction(二维差分)

题目大意:给nxm和axb的矩阵,每次从nxm矩阵中选择axb子矩阵使每个元素-1,问nxm矩阵能否所有元素为0.

题解:网上找的官方题解

传送门

代码:

队友写的...应该不是差分 正解明天补

#include<iostream>
#include<string>
using namespace std;
int a1[1010][1010];
int main()
{
    int t;
    cin>>t;
    int n,m,a,b;
    int i,i1,i2,i3;
    int c;
    bool k=0,k1=0;
    while(t--)
    {
        cin>>n>>m>>a>>b;
        for(i=0;i<n;i++)
        {
            for(i1=0;i1<m;i1++)
            {
                scanf("%d",&a1[i][i1]);
            }
        }
        int n1=n/a-1;
        int m1=m-b+1;
        k=0;
        for(i=0;i<n1;i++)
        {
            for(i1=0;i1<m1;i1++)
            {
                if(a1[i*a][i1]>=0)
                {
                    for(i2=i*a+1;i2<a+i*a;i2++)
                    {
                        if(a1[i2][i1]<a1[i2-1][i1]) 
                        {
                            cout<<"QAQ"<<endl;
                            k=1;
                            break;
                        }
                    }
                    if(k)
                    {
                        break;
                    }
                    for(i2=i*a;i2<a+i*a;i2++)
                    {
                        for(i3=i1+b-1;i3>i1-1;i3--)
                        {
                            a1[i2+a][i3]-=a1[i*a+a-1][i1]-a1[i2][i1];
                        }
                    }
                    for(i2=i*a;i2<a+i*a;i2++)
                    {
                        for(i3=i1+b-1;i3>i1-1;i3--)
                        {
                            a1[i2][i3]-=a1[i2][i1];
                        }
                    }
                }
            }
            if(k)
            {
                break;
            }
        }
        if(k)
        {
            k=0;
            continue;
        }
        for(i1=0;i1<m1;i1++)
        {
            if(a1[i*a][i1]>=0)
            {
                for(i2=i*a+1;i2<i*a+n%a+1;i2++)
                {
                    if(a1[i2][i1]<a1[i2-1][i1]) 
                    {
                        cout<<"QAQ"<<endl;
                        k=1;
                        break;
                    }
                }
                if(k)
                {
                    break;
                } 
                for(;i2<i*a+a;i2++)
                {
                    if(a1[i2][i1]!=a1[i2-1][i1]) 
                    {
                        cout<<"QAQ"<<endl;
                        k=1;
                        break;
                    }
                }
                if(k)
                {
                    break;
                }
                for(i2=i*a;i2<i*a+n%a+1;i2++)
                {
                    for(i3=i1+b-1;i3>i1-1;i3--)
                    {
                        a1[i2+a][i3]-=a1[i*a+a-1][i1]-a1[i2][i1];
//                        cout<<i2+a<<' '<<i3<<' '<<i*a+a-1<<' '<<i1<<' '<<i2<<' '<<i1<<endl;
//                        cout<<a1[i2+a][i3]<<' '<<a1[i*a+a-1][i1]<<' '<<a1[i2][i1]<<endl;
                    }
                }
                for(i2=i*a;i2<a+i*a;i2++)
                {
                    for(i3=i1+b-1;i3>i1-1;i3--)
                    {
                        a1[i2][i3]-=a1[i2][i1];
                    }
                }
            }
        }
        if(k)
        {
            k=0;
            continue;
        }
        for(i=0;i<n;i++)
        {
            for(i1=0;i1<m;i1++)
            {
                if(a1[i][i1])
                {
                    k=1;
                }
//                cout<<a1[i][i1]<<' ';
            }
//            cout<<endl;
        }
        if(k)
        {
            k=0;
            cout<<"QAQ"<<endl;
        }
        else
        {
            cout<<"^_^"<<endl;
        }
    }
} 
View Code
原文地址:https://www.cnblogs.com/zzyh/p/13888056.html