题目
July 6, 2021 · View on GitHub
Assume you have a square of size n that is divided into n × n positions just as a checkerboard. Two positions (x 1, y 1) and (x 2, y 2), where 1 ≤ x 1, y 1, x 2, y 2 ≤ n, are called “independent” if they occupy different rows and different columns, that is, x 1 ≠ x 2 and y 1 ≠ y 2. More generally, n positions are called independent if they are pairwise independent. It follows that there are n! different ways to choose n independent positions.
Assume further that a number is written in each position of such an n × n square. This square is called “homogeneous” if the sum of the numbers written in n independent positions is the same, no matter how the positions are chosen. Write a program to determine if a given square is homogeneous!
输入描述 The input contains several test cases.
The first line of each test case contains an integer n (1 ≤ n ≤ 1000). Each of the next n lines contains n numbers, separated by exactly one space character. Each number is an integer from the interval [−1000000, 1000000].
The last test case is followed by a zero.
输出描述 For each test case output whether the specified square is homogeneous or not. Adhere to the format shown in the sample output.
输入例子
2
1 2
3 4
3
1 3 4
8 6 -2
-3 4 0
0
输出例子
homogeneous
not homogeneous
参考答案
#include <cstdlib>
#include <cctype>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>
#include <sstream>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <fstream>
#include <numeric>
#include <iomanip>
#include <bitset>
#include <list>
#include <stdexcept>
#include <functional>
#include <utility>
#include <ctime>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
#define MAX(a,b) ((a) > (b) ? (a) : (b))
#define MIN(a,b) ((a) < (b) ? (a) : (b))
#define MEM(a,b) memset((a),(b),sizeof(a))
const LL INF = 1000000007;
const int N = 1e3+10;
const double eps = 1e-12;
int a[N][N];
int main()
{
int n;
while (scanf("%d", &n) != EOF)
{
if (n == 0) break;
int flag = 1;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
scanf("%d", &a[i][j]);
}
}
for (int i = 0; i < n; i++)
{
for (int j = i + 1; j < n; j++)
{
if (a[i][i] + a[j][j] != a[i][j] + a[j][i])
{
flag = 0;
break;
}
}
if (flag == 0) break;
}
if (flag) puts("homogeneous");
else puts("not homogeneous");
}
return 0;
}