题目描述
有一个1到N的排列P,给定P中任意两数的大小关系,求恢复这个排列。
输入
第一行一个整数N,接下来N行,每行N个数。
第i行第j列为-1表示Pi<Pj,为1表示Pi>Pj,为0表示Pi=Pj。
1 <= N <= 1000
输出
输出一行N个数,表示排列P。
样例输入
5
0 1 1 1 1
-1 0 1 1 1
-1 -1 0 -1 1
-1 -1 1 0 1
-1 -1 -1 -1 0
样例输出
5 4 2 3 1
题解
思路:
ans = (sum + N + 1) / 2
ans:答案
sum:每一行的和
N: N个数
如下计算:
N = 5
num1 | num2 | num3 | num4 | num5 | sum | ans |
---|---|---|---|---|---|---|
0 | 1 | 1 | 1 | 1 | 4 | 5 |
-1 | 0 | 1 | 1 | 1 | 2 | 4 |
-1 | -1 | 0 | -1 | 1 | -2 | 2 |
-1 | -1 | 1 | 0 | 1 | 0 | 3 |
-1 | -1 | -1 | -1 | 0 | -4 | 1 |
代码:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int N;
cin >> N;
vector<int> ans(N);
vector<vector<int>> array(N, vector<int>(N));
for (int i = 0; i < array.size(); i++)
{
int sum = 0;
for (int j = 0; j < array[i].size(); j++)
{
cin >> array[i][j];
sum += array[i][j];
}
ans[i] = (sum + N + 1) / 2;
}
for (int i = 0; i < ans.size(); i++)
{
cout << ans[i]<< ' ';
}
return 0;
}