• CF 711B


    挺简单的一道题,但是做的时候没想好就开始写代码了,导致迷之WA,还是要多练习啊。

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <queue>
    #include <set>
    #define LL long long int
    using namespace std;
    LL Map[505][505];
    int main() {
        cin.sync_with_stdio(false);
        int n;
        while(cin>>n)
        {
            int x,y;
            LL sumy[505],sumx[505],sum[2]={0,0};
            for(int i=0;i<n;i++)
            {
                sumy[i]=sumx[i]=0;
                for(int j=0;j<n;j++)
                {
                    cin>>Map[i][j];
                    if(Map[i][j]==0)
                        y=i,x=j;
                }
            }
            //特判1
            if(n==1)
            {
                cout<<1<<endl;
                continue;
            }
            for(int i=0;i<n;i++)
                for(int j=0;j<n;j++)
                {
                    sumx[j]+=Map[i][j],sumy[i]+=Map[i][j];
                    if(i==j)
                        sum[0]+=Map[i][j];
                    if(i==(n-j-1))
                        sum[1]+=Map[i][j];
                }
            set<LL> s;
            set<LL>::iterator it;
            LL flag=1,more=2,less=1;
            s.insert(sum[0]),s.insert(sum[1]);
            for(int i=0;i<n;i++)
                s.insert(sumx[i]),s.insert(sumy[i]);
            if(s.size()>2)//超过两种就GG
                flag=0;
            if(s.size()==2)//保证和0点关联的都是较小的反之较大
            {
                it=s.begin();
                more=*it;
                it++;
                less=*it;
                if(more<less)
                    swap(more,less);
                for(int i=0;i<n;i++)
                {
                    if(i==x)
                    {
                        if(sumx[i]!=less)
                            flag=0;
                    }
                    else
                        if(sumx[i]!=more)
                            flag=0;
                    if(i==y)
                    {
                        if(sumy[i]!=less)
                            flag=0;
                    }
                    else
                        if(sumy[i]!=more)
                            flag=0;
                }
                if(x==y)
                {
                    if(sum[0]!=less)
                        flag=0;
                }
                else
                    if(sum[0]!=more)
                        flag=0;
                if(x==n-y-1)
                {
                    if(sum[1]!=less)
                        flag=0;
                }
                else
                    if(sum[1]!=more)
                        flag=0;
            }
            else if(s.size()==1)//0点必须在中心
            {
                if(n%2!=1||x!=n/2||y!=n/2)
                    flag=0;
            }
            if(flag)
                cout<<more-less<<endl;
            else
                cout<<-1<<endl;
        }
        return 0;
    }
  • 相关阅读:
    Silverlight分享一套企业开发主题
    [Silverlight]常见问题
    Silverlight开发工具汇总
    ExecuteNonQuery返回负数
    Silverlight客户端调用WCF服务难题解疑
    winform调用WCF默认实例
    WCF默认实例的解读
    Silverlight闹钟
    HelloSilverlight
    读取Word文档的标题
  • 原文地址:https://www.cnblogs.com/LukeStepByStep/p/5837858.html
Copyright © 2020-2023  润新知