博客
关于我
【洛谷_P1347】排序
阅读量:285 次
发布时间:2019-03-03

本文共 2558 字,大约阅读时间需要 8 分钟。

排序


题目描述

一个不同的值的升序排序数列指的是一个从左到右元素依次增大的序列,例如,一个有序的数列 A A A , B B B, C C C , D D D 表示 A < B A<B A<B , B < C B<C B<C , C < D C<D C<D 。在这道题中,我们将给你一系列形如 A < B A<B A<B 的关系,并要求你判断是否能够根据这些关系确定这个数列的顺序。

输入格式

第一行有两个整数 n n n , m m m n n n 表示需要排序的元素数量, 2 < = n < = 26 2<=n<=26 2<=n<=26,第 1 1 1 n n n 个元素将用大写的 A , B , C , D A,B,C,D A,B,C,D …表示。 m m m表示将给出的形如 A < B A<B A<B的关系的数量。

接下来有 m m m 行,每行有 3 3 3 个字符,分别为一个大写字母,一个 < < < 符号,一个大写字母,表示两个元素之间的关系。

输出格式

若根据前 x x x 个关系即可确定这 n n n 个元素的顺序 y y y . . . y yyy...y yyy...y(如 A B C ABC ABC),输出

S o r t e d   s e q u e n c e   d e t e r m i n e d   a f t e r   x x x   r e l a t i o n s : y y y . . . y . Sorted~sequence~determined~after~xxx~relations: yyy...y. Sorted sequence determined after xxx relations:yyy...y.

若根据前 x x x 个关系即发现存在矛盾(如 A < B A<B A<B , B < C B<C B<C , C < A C<A C<A ),输出

I n c o n s i s t e n c y   f o u n d   a f t e r   2   r e l a t i o n s . Inconsistency~found~after~2~relations. Inconsistency found after 2 relations.

若根据这 m m m 个关系无法确定这 n n n 个元素的顺序,输出

S o r t e d   s e q u e n c e   c a n n o t   b e   d e t e r m i n e d . Sorted~sequence~cannot~be~determined. Sorted sequence cannot be determined.

(提示:确定 n n n 个元素的顺序后即可结束程序,可以不用考虑确定顺序之后出现矛盾的情况)

输入输出样例

输入#1

4 6A

输出#1

Sorted sequence determined after 4 relations: ABCD.

输入#2

3 2A

输出#2

Inconsistency found after 2 relations.

输入#3

26 1A

输出#3

Sorted sequence cannot be determined.

解题思路

第一种情况:

我们记录一条最长链的长度,如果 l e n = = n len==n len==n就输出队列里的内容

第二种情况

如果输入时 x = = y x==y x==y或者 d u [ i ] ! = 0 du[i]!=0 du[i]!=0则说明它有环,则是第二种情况

第三种情况

如果前两种情况都不是,就是第三种情况

code(注:一边输入一边拓扑,以保证第二种情况)

#include
#include
using namespace std;int n,m,b[1000],v[1000],d[1000];int head[1000],tot,f[1000],l,ans[1000];struct abc{ int to,next;}s[1000];void add(int x,int y){ s[++tot]=(abc){ y,head[x]}; head[x]=tot; }void tp(){ int hd=0,tl=0; l=0; for(int i=1;i<=n;i++) { ans[i]=f[i]=v[i]=0; d[i]=b[i]; if(d[i]==0) { tl++; v[i]=1; f[tl]=i; ans[i]=1; } } while(hd
>n>>m; for(int i=1;i<=m;i++) { char a; int x,y; cin>>a; x=a-64; cin>>a>>a; y=a-64; if(x==y) { printf("Inconsistency found after %d relations.",i); return 0; } add(x,y); b[y]++; tp(); for(int j=1;j<=n;j++) if(d[j]>0) { printf("Inconsistency found after %d relations.",i); return 0; } if(l==n) { printf("Sorted sequence determined after %d relations: ",i); for(int j=1;j<=n;j++) printf("%c",f[j]+64); printf("."); return 0; } } printf("Sorted sequence cannot be determined."); return 0;}

转载地址:http://ughl.baihongyu.com/

你可能感兴趣的文章
jQuery练习t277,从0到1
查看>>
jQuery练习t288,从0到1
查看>>
jQuery练习t309,从0到1
查看>>
jQuery练习t310,从0到1
查看>>
jQuery练习t313,从0到1
查看>>
asp.net4.5练习~test4-2
查看>>
asp.net4.5练习~test4-4
查看>>
asp.net 4.5 练习~test4-10
查看>>
asp.net 4.5 练习~test5-2
查看>>
asp.net 4.5 练习~test5-6
查看>>
asp.net 4.5 练习~test5-7
查看>>
asp.net 4.5 练习~test9-6
查看>>
asp.net 4.5 练习~test14-5 写文件
查看>>