本文共 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 个元素的顺序后即可结束程序,可以不用考虑确定顺序之后出现矛盾的情况)
4 6A
Sorted sequence determined after 4 relations: ABCD.
3 2A
Inconsistency found after 2 relations.
26 1A
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则说明它有环,则是第二种情况
如果前两种情况都不是,就是第三种情况
#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/