您的位置:首页 > 其它

CodeForces 618B (找规律)

2016-03-30 22:11 260 查看
CodeForces
618B


Description

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 Input

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


Sample Output

10


Hint

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}.

题意:存在一个序列:a[1]~a
,这n个数分别为1~n,顺序不定。如坐标为map[1][3]=min(a[1],a[3]),即:map[x][y]=min(a[x],a[y]),若x==y,则map[x][y]=0。

规律:

找出第i列或第i行元素的最大值max[i],则a[i]=max[i];其中必有两行或者两列的最大值相等,且为n-1;此时这两行或两列的最大值一个为n-1,一个为n,这两行可以任意从中取值,没有顺序,因此答案不固定。

My  solution:

/*2016.3.27*/

#include<algorithm>
#include<stdio.h>
#include<string.h>
using namespace std;
int map[55][55],ans[55];
int main()
{
int i,j,k,n,m,t;
while(scanf("%d",&n)==1)
{
t=0;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&map[i][j]);
for(i=1;i<=n;i++)
{
sort(map[i]+1,map[i]+1+n);
if(map[i]
==n-1)
{
if(t==0)
{
ans[i]=n;
t=1;
}
else
ans[i]=n-1;
}
else
ans[i]=map[i]
;
}
for(i=1;i<=n;i++)
printf("%d ",ans[i]);
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: