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
Output
Input
Output
Sample Output
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;
}
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;
}
相关文章推荐
- 蟠桃记 -2013
- Sereja and Suffixes
- UnicodeDecodeError: 'utf8' codec can't decode byte 0xb1 in position 0: invalid start byte
- Python基本语法
- 实验4 颜色、字符串资源的使用
- 20135316Linux内核学习笔记第六周
- 【转】关于分布式事务、两阶段提交协议、三阶提交协议
- 2016去哪儿编程题:表达式合法判断
- 包
- Chrome设置新标签页来打开链接
- 337. House Robber III
- 设计模式之享元模式
- git版本控制工具的学习
- linux配置java环境变量
- Handler 接收Parcelable ArrayList时返回空的错误
- Docker安装脚本源码解读
- 笔记 - Android - 6.上下文Context API
- ubuntu中安装docker
- 孤儿进程和僵尸进程
- mybatis 注解和xml的使用