首页 > 代码库 > CF 711B - Chris and Magic Square
CF 711B - Chris and Magic Square
挺简单的一道题,但是做的时候没想好就开始写代码了,导致迷之WA,还是要多练习啊。
#include <iostream>#include <cstdio>#include <algorithm>#include <queue>#include <set>#define LL long long intusing 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;}
CF 711B - Chris and Magic Square
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。