zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Node.js之使用Buffer类处理二进制数据
    node.js之require
    node.js之模块
    node.js之setTimeout()、clearTimeout()与 setInterval()与clearInterval()
    Node.js之包与npm包管理工具
    node.js基础知识
    运维之linux基础知识(一)
    node.js之调试器
    Ubuntu 18.04安装搜狗输入法
    微信小程序项目总结记账小程序(包括后端)
  • 原文地址:https://www.cnblogs.com/zzyh/p/13888056.html
Copyright © 2011-2022 走看看