0
点赞
收藏
分享

微信扫一扫

2021安徽省大学生程序设计竞赛正式赛:B 恢复排列

一叶随风_c94d 2022-02-22 阅读 85

题目描述

有一个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

num1num2num3num4num5sumans
0111145
-1011124
-1-10-11-22
-1-110103
-1-1-1-10-41

代码:

#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;

}
举报

相关推荐

0 条评论