CF 711B - Chris and Magic Square

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

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <set>
#define LL long long int
using namespace std;
LL Map[][];
int main() {
cin.sync_with_stdio(false);
int n;
while(cin>>n)
{
int x,y;
LL sumy[],sumx[],sum[]={,};
for(int i=;i<n;i++)
{
sumy[i]=sumx[i]=;
for(int j=;j<n;j++)
{
cin>>Map[i][j];
if(Map[i][j]==)
y=i,x=j;
}
}
//特判1
if(n==)
{
cout<<<<endl;
continue;
}
for(int i=;i<n;i++)
for(int j=;j<n;j++)
{
sumx[j]+=Map[i][j],sumy[i]+=Map[i][j];
if(i==j)
sum[]+=Map[i][j];
if(i==(n-j-))
sum[]+=Map[i][j];
}
set<LL> s;
set<LL>::iterator it;
LL flag=,more=,less=;
s.insert(sum[]),s.insert(sum[]);
for(int i=;i<n;i++)
s.insert(sumx[i]),s.insert(sumy[i]);
if(s.size()>)//超过两种就GG
flag=;
if(s.size()==)//保证和0点关联的都是较小的反之较大
{
it=s.begin();
more=*it;
it++;
less=*it;
if(more<less)
swap(more,less);
for(int i=;i<n;i++)
{
if(i==x)
{
if(sumx[i]!=less)
flag=;
}
else
if(sumx[i]!=more)
flag=;
if(i==y)
{
if(sumy[i]!=less)
flag=;
}
else
if(sumy[i]!=more)
flag=;
}
if(x==y)
{
if(sum[]!=less)
flag=;
}
else
if(sum[]!=more)
flag=;
if(x==n-y-)
{
if(sum[]!=less)
flag=;
}
else
if(sum[]!=more)
flag=;
}
else if(s.size()==)//0点必须在中心
{
if(n%!=||x!=n/||y!=n/)
flag=;
}
if(flag)
cout<<more-less<<endl;
else
cout<<-<<endl;
}
return ;
}
上一篇:读书笔记_python网络编程3_(1)


下一篇:【FLUENT案例】03:冲蚀