Wunder Fund Round 2016 (Div. 1 + Div. 2 combined) B Guess the Permutation (两种做法,水题的一点点思考)

B. Guess the Permutation
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

Bob has a permutation of integers from 1 to n. Denote this permutation as p. The i-th element of p will be denoted as pi. For all pairs of distinct integers i, j between 1 and n, he wrote the number ai, j = min(pi, pj). He writes ai, i = 0 for all integer i from 1 to n.

Bob gave you all the values of ai, j that he wrote down. Your job is to reconstruct any permutation that could have generated these values. The input will be formed so that it is guaranteed that there is at least one solution that is consistent with the information given.

Input

The first line of the input will contain a single integer n (2 ≤ n ≤ 50).

The next n lines will contain the values of ai, j. The j-th number on the i-th line will represent ai, j. The i-th number on the i-th line will be 0. It's guaranteed that ai, j = aj, i and there is at least one solution consistent with the information given.

Output

Print n space separated integers, which represents a permutation that could have generated these values. If there are multiple possible solutions, print any of them.

Sample test(s)
Input
2
0 1
1 0
Output
2 1
Input
5
0 2 2 1 2
2 0 4 1 3
2 4 0 1 3
1 1 1 0 1
2 3 3 1 0
Output
2 5 4 1 3
Note

In the first case, the answer can be {1, 2} or {2, 1}.

In the second case, another possible answer is {2, 4, 5, 1, 3}.


题意:给你一个对称矩阵,并告诉你矩阵中元素的含义,让你还原一个排列P。

思路1:统计第i行出现次数最多的那个数,就是p[i]的对应值,如果都只出现过一次,则该行的值,要么是最大值,要么是次大值。

思路2:结论:每行中的最大元素就是p[i]的答案(除非maxn=n-1)。

              为什么?很简单,我们用反证法,假设该行的存在一个较小值a[i][j']<a[i][j]是该行的答案,且这两个值出现的次数不全为1次,则再设a[i][k]=a[i][j']<a[i][j]

              则根据定义a[i][k]=min(p[i],p[k])=a[i][j']=min(p[i],p[j']) 若这两个值得相等,且要满足是一个正常的无重复的排列,显然不可能有a[i][j']=a[i][k]=p[j]=p[k]的情况,那么只有p[i]=a[i][k]=a[i[j']

              但又因为a[i][j]=min(p[i],p[j])>a[i][j'] 则说明p[i]>a[i][j'] 与之前的结论不符,故不成立,因此这题可以在每行输入进来后直接求取最大值,存进数组,最后特判一下最大值为N-1的情况,输出即可,更加简洁方便。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值