首页 > 代码库 > 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