CF 711B - Chris and Magic Square
2024-08-27 04:45:16
挺简单的一道题,但是做的时候没想好就开始写代码了,导致迷之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 ;
}
最新文章
- Java知识结构
- C# 一些常用的技巧代码
- 高仿700Bike的界面图片
- LIS(nlogn) POJ 3903 Stock Exchange
- [iOS微博项目 - 2.5] - 封装授权和用户信息读写业务
- IT项目量化管理:细化、量化与图形化 与 中国IT项目实施困惑
- 秒味课堂Angular js笔记------$scope.$watch和$scope.$apply
- ORACLE表空间
- JAVA的IO学习
- jq交叉淡入淡出轮播图
- java查看程序执行时间
- Axure RP初学
- Android源码解析——LruCache
- [Codeforces757G]Can Bash Save the Day?——动态点分治(可持久化点分树)
- 一道并查集的(坑)题:关闭农场closing the farm
- php中类继承和接口继承的对比
- [Unity工具]查找GameObject在场景中所有被引用的地方
- Javascript - LayUI库的流加载
- Typora 自定义主题 修改左右间距
- 【Linux】VirtualBox安装ubuntu排错LowGraphic