博客
关于我
【洛谷_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/

你可能感兴趣的文章
数据结构与算法学习1-----稀疏数组
查看>>
java手动实现JWT(我和别人的不一样)
查看>>
LetCode刷题记录--No3-无重复字符的最长子串
查看>>
Java转换xml格式时间 (yyyy-MM-ddTHH:mm:ss.SSSZ)
查看>>
Python 使用 __getstate__ 和 __setstate__ 魔法方法
查看>>
ts从入门到进阶—4.2类
查看>>
hook钩子介绍
查看>>
关于json
查看>>
字符串详解
查看>>
焦点事件
查看>>
webpack打包常见报错
查看>>
vuex—1vuex初始
查看>>
axios服务器通信—1axios介绍和使用mock数据
查看>>
web前端面试一从输入url到看到页面发生了什么
查看>>
关于IP地址
查看>>
IO复用之epoll
查看>>
智慧水利的泵站自动化监控系统解决方案
查看>>
C getopt.h
查看>>
TensorRT/parsers/caffe/caffeParser/caffeParser.h源碼研讀
查看>>
PCL MLS論文Computing and Rendering Point Set Surfaces研讀筆記
查看>>