• Codeforces 711B 【模拟】


    比赛的时候绝壁打麻烦了。。。
    考虑的好麻烦。。。wa7。。。还要判断出来的是不是positive的。。。
    好吧。。认了。。

    #include<cstdio>
    #include <map>
    #include<iostream>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    
    typedef __int64 LL;
    
    const int N=5e2+10;
    
    LL ma[N][N];
    LL row[N];
    LL col[N];
    LL s1,s2;
    int n;
    
    int main()
    {
        memset(row,0,sizeof(row));
        memset(col,0,sizeof(col));
        s1=s2=0;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                scanf("%I64d",&ma[i][j]);
    //1的话随便
        if(n==1)
        {
            if(!ma[1][1])
                puts("1");
            else
                printf("%I64d
    ",ma[1][1]);
            return 0;
        }
    
    //找到0位置
        int x=-1,y=-1;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            if(!ma[i][j])
            {
                x=i;
                y=j;
                break;
            }
            if(x!=-1)
                break;
        }
        //printf("%d %d
    ",x,y);
    
        for(int i=1;i<=n;i++)
        {
            if(i!=x)
            {
                for(int j=1;j<=n;j++)
                    row[i]+=ma[i][j];
            }
        }
        for(int j=1;j<=n;j++)
        {
            if(j!=y)
            {
                for(int i=1;i<=n;i++)
                    col[j]+=ma[i][j];
            }
        }
    //斜的
    //顺的
        if(x!=y)
        {
            for(int i=1;i<=n;i++)
            {
                s1+=ma[i][i];
            }
        }
    //逆的
        if(x+y!=n+1)
            for(int i=1;i<=n;i++)
            {
                s2+=ma[i][n-i+1];
            }
    
        if(x!=y&&x+y!=n+1)
            if(s1!=s2)
            {
                puts("-1");
                return 0;
            }
    //横的
        LL temp1,temp2;
        for(int i=1;i<=n;i++)
        {
            if(i!=x)
            {
                temp1=row[i];
                break;
            }
        }
        for(int i=1;i<=n;i++)
        {
            if(i!=x)
            {
                if(temp1!=row[i]||(s1!=row[i]&&x!=y)||(s2!=row[i]&&x+y!=n+1))
                {
                    //printf("here?
    ");
                    puts("-1");
                    return 0;
                }
            }
        }
    //竖的
        for(int i=1;i<=n;i++)
        {
            if(i!=y)
            {
                temp1=col[i];
                break;
            }
        }
        for(int i=1;i<=n;i++)
        {
            if(i!=y)
            {
                if(temp1!=col[i]||(x!=y&&s1!=col[i])||(s2!=col[i]&&x+y!=n+1))
                {
                    puts("-1");
                    return 0;
                }
            }
        }
        temp2=temp1;
    //求一个
        //printf("temp1=%I64d
    ",temp1);
        for(int i=1;i<=n;i++)
        {
            if(i==x)
            {
                for(int j=1;j<=n;j++)
                {
                    if(ma[i][j])
                        temp1-=ma[i][j];
                }
                ma[x][y]=temp1;
                break;
            }
        }
        LL k1,k2,k3,k4;
        temp1=temp2;
        k1=0;
        k2=0;
        k3=0;
        k4=0;
        for(int i=1;i<=n;i++)
            k1+=ma[x][i];
        for(int i=1;i<=n;i++)
            k2+=ma[i][y];
        if(k1!=temp1||k2!=temp2||k1!=k2)
        {
            //printf("here?
    ");
            puts("-1");
            return 0;
        }
        if(x==y)
        {
            for(int i=1;i<=n;i++)
                k3+=ma[i][i];
            if(k3!=k2)
            {
                puts("-1");
                return 0;
            }
        }
        if(x+y==n+1)
        {
            for(int i=1;i<=n;i++)
                k4+=ma[i][n+1-i];
            if(k4!=k2)
            {
                puts("-1");
                return 0;
            }
        }
        if(ma[x][y]>0)
            printf("%I64d
    ",ma[x][y]);
        else
            puts("-1");
        return 0;
    }
    
    /*
    4
    1 1 1 1
    1 1 0 1
    1 1 1 1
    1 1 1 1
    */
  • 相关阅读:
    WebSVN 2.3.3
    webSVN客户端(转) initOS的日志 网易博客
    分享:httping 2.0 发布,测试 HTTP 连接的工具
    ThriftUsageC++ Thrift Wiki
    硬盘接口:SCSI、IDE与SATA的区别
    把event sql导入数据库难点
    cpu插槽 LGA 1155
    Processing简介
    技嘉主板GAB75MD3V产品规格
    pci Express
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934847.html
Copyright © 2020-2023  润新知