首页 > 代码库 > codeforces #369div2 B. Chris and Magic Square
codeforces #369div2 B. Chris and Magic Square
题目:在网格某一处填入一个正整数,使得网格每行,每列以及两条主对角线的和都相等
分析:题目不难,找到要填的那个数填进去,然后循环比较每行每列以及对角线的和是否相等,题目提交上去卡了几次要注意几点
注意:1.答案数据范围1<=x<=1e18,要用 long long
2.特殊情况,n==1时,由于一定有要填的数,所以一定有解
3.反正就是要注意看清楚题目和数据边界情况处理啦
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 long long mp[505][505]; 6 long long row[505],col[505]; 7 int main() 8 { 9 int n;10 scanf("%d",&n);11 memset(row,0,sizeof(row));12 memset(col,0,sizeof(col));13 int x,y;14 for(int i=0;i<n;i++)15 {16 for(int j=0;j<n;j++)17 {18 scanf("%d",&mp[i][j]);19 if(mp[i][j]==0)20 {21 x=i;y=j;22 }23 row[i]+=mp[i][j];24 col[j]+=mp[i][j];25 }26 }27 bool is=1;28 if(x==0)29 {30 mp[x][y]=row[1]-row[0];31 row[x]+=mp[x][y];32 col[y]+=mp[x][y];33 if(col[0]!=row[0])34 is=0;35 else36 {37 for(int i=1;i<n;i++)38 {39 if(row[i]!=row[0])40 {41 is=0;break;42 }43 if(col[i]!=col[0])44 {45 is=0;break;46 }47 }48 }49 }50 else51 {52 mp[x][y]=row[0]-row[x];53 row[x]+=mp[x][y];54 col[y]+=mp[x][y];55 if(col[0]!=row[0])56 is=0;57 else58 {59 for(int i=1;i<n;i++)60 {61 if(row[i]!=row[0])62 {63 is=0;break;64 }65 if(col[i]!=col[0])66 {67 is=0;break;68 }69 }70 }71 }72 long long dia1=0,dia2=0;73 for(int i=0,j=n-1;(i<n&&j>=0);i++,j--)74 {75 dia1+=mp[i][i];76 dia2+=mp[i][j];77 }78 if(dia1!=row[0])79 is=0;80 else if(dia2!=dia1)81 is=0;82 if(n==1) //注意特判83 cout<<"1"<<endl;84 else if(is&&mp[x][y]>=1) //注意答案要>=185 cout<<mp[x][y]<<endl;86 else87 cout<<"-1"<<endl;88 return 0;89 }
codeforces #369div2 B. Chris and Magic Square
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。