zoukankan      html  css  js  c++  java
  • codeforces #369div2 B. Chris and Magic Square

    题目:在网格某一处填入一个正整数,使得网格每行,每列以及两条主对角线的和都相等

    题目链接:http://codeforces.com/contest/711/problem/B

    分析:题目不难,找到要填的那个数填进去,然后循环比较每行每列以及对角线的和是否相等,题目提交上去卡了几次要注意几点

    注意:1.答案数据范围$1leq x leq 1e18$,要用 long long

            2.特殊情况,$n equiv 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         else
    36         {
    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     else
    51     {
    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         else
    58         {
    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)  //注意答案要>=1
    85         cout<<mp[x][y]<<endl;
    86     else
    87         cout<<"-1"<<endl;
    88     return 0;
    89 }
  • 相关阅读:
    写页面得来的体会
    C#&java重学笔记(面向对象)
    C#&java重学笔记(函数)
    C#&java重学笔记(变量与操作符)
    深入JS第一天:原型和它的小伙伴们(一)
    兼容性积累
    再深入一点ajax
    Android之内存泄漏调试学习与总结
    优雅地实现Android主流图片加载框架封装,可无侵入切换框架
    优雅地实现Android主流图片加载框架封装,可无侵入切换框架
  • 原文地址:https://www.cnblogs.com/tristatl/p/5825777.html
Copyright © 2011-2022 走看看