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 }
  • 相关阅读:
    Running APP 使用说明
    Android 控件八 WebView 控件
    Android 控件七 ImageView 控件
    Android 控件六 CheckBox 控件
    Android 控件五 RadioButton 控件
    Android 控件四 EditText 控件
    Android 控件三 TextView 控件实现 Button
    Android 控件二 Button
    Android 基础控件演示实例
    Android 控件一 TextView
  • 原文地址:https://www.cnblogs.com/tristatl/p/5825777.html
Copyright © 2011-2022 走看看