题解:P10567 「Daily OI Round 4」Square

· · 题解

题意

把 1 到 n^2 的自然数填到一个边长为 n 的正方形网格里。要求每一行的和是奇数,每一列的和是偶数。

思路

若 n 为奇数时,把所有的行加起来就是奇数乘奇数等于奇数。再把所有的列加起来就是奇数乘偶数等于偶数。最后把所有的行和所有的列加起来,就是奇数加偶数,一定是奇数。这也就相当于把所有的数加起来的和的 2 倍,一定是偶数。与前面所述矛盾。

若 n 为偶数时,把所有的行加起来就是奇数乘偶数等于偶数。再把所有的列加起来就是偶数乘偶数等于偶数。最后把所有的行和所有的列加起来,就是偶数加偶数,一定是偶数。这也就相当于把所有的数加起来的和的 2 倍,一定是偶数。符合前面所述。

综上所述,只要 n 为偶数,就可以构造出来。

AC 代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n;
int main(){
    cin >> n;
    if(n % 2 == 0) cout << "Yes";
    else cout << "No";
    return 0;
}