Sorting It All Out

Sorting It All Out

Description

An ascending sorted sequence of distinct values is one in which some form of a less-than operator is used to order the elements from smallest to largest. For example, the sorted sequence A, B, C, D implies that A < B, B < C and C < D. in this problem, we will give you a set of relations of the form A < B and ask you to determine whether a sorted order has been specified or not.

Input

Input consists of multiple problem instances. Each instance starts with a line containing two positive integers n and m. the first value indicated the number of objects to sort, where 2 <= n <= 26. The objects to be sorted will be the first n characters of the uppercase alphabet. The second value m indicates the number of relations of the form A < B which will be given in this problem instance. Next will be m lines, each containing one such relation consisting of three characters: an uppercase letter, the character “<” and a second uppercase letter. No letter will be outside the range of

the first n letters of the alphabet. Values of n = m = 0 indicate end of input.

Output

For each problem instance, output consists of one line. This line should be one of the following three:

Sorted sequence determined after xxx relations: yyy…y. Sorted sequence cannot be determined. Inconsistency found after xxx relations.

where xxx is the number of relations processed at the time either a sorted sequence is determined or an inconsistency is found, whichever comes first, and yyy…y is the sorted, ascending sequence.

Sample Input

4 6
A<B
A<C
B<C
C<D
B<D
A<B
3 2
A<B
B<A
26 1
A<Z
0 0

Sample Output

Sorted sequence determined after 4 relations: ABCD.
Inconsistency found after 2 relations.
Sorted sequence cannot be determined.



 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<map>
 6 #include<set>
 7 #include<stack>
 8 #include<queue>
 9 #include<vector>
10 using namespace std;
11 const int ms=26;
12 int n,m;
13 bool appear[ms];
14 char output[ms+1];
15 int cnt[ms];
16 int tmp[ms];
17 vector<vector<char> > v;
18 int topo_sort(int s)
19 {
20     int i,j,k,flag=1;
21     int total=0,r=0;
22     for(i=0;i<n;i++)
23         tmp[i]=cnt[i];
24     while(s--)
25     {
26         total=0;
27         for(i=0;i<n;i++)
28             if(appear[i]&&tmp[i]==0)
29             {
30                 j=i;
31                 total++;
32             }
33         if(total>=1)
34         {
35             if(total>1)
36                 flag=0;
37             for(i=0;i<v[j].size();i++)
38                 tmp[v[j][i]]--;
39             tmp[j]=-1;
40             output[r++]=j+'A';
41             output[r]=0;
42         }
43         else
44             return -1;
45     }
46     if(flag)
47         return r;
48     return 0;
49 }
50 int main()
51 {
52     int i,j,k,judge,det;
53     char str[4];
54     while(scanf("%d%d",&n,&m)==2&&(n+m))
55     {
56         judge=0;
57         det=0;
58         int sum=0;
59         v.clear();v.resize(n);
60         memset(cnt,0,sizeof(cnt));
61         memset(appear,false,sizeof(appear));
62         for(i=1;i<=m;i++)
63         {
64             scanf("%s",str);
65             cnt[str[2]-'A']++;
66             v[str[0]-'A'].push_back(str[2]-'A');
67             if(!appear[str[0]-'A'])
68             {
69                 sum++;
70                 appear[str[0]-'A']=1;
71             }
72             if(!appear[str[2]-'A'])
73             {
74                 sum++;
75                 appear[str[2]-'A']=1;
76             }
77             if(judge==0)
78             {
79                 det=topo_sort(sum);
80                 if(det==-1)
81                 {
82                     judge=-1;k=i;
83                 }
84                 else if(det==n)
85                 {
86                     judge=1;
87                     k=i;
88                 }
89             }
90         }
91         if(judge==-1)
92             printf("Inconsistency found after %d relations.\n",k);
93         else if(judge==0)
94             printf("Sorted sequence cannot be determined.\n");
95         else
96             printf("Sorted sequence determined after %d relations: %s.\n",k,output);
97     }
98     return 0;
99 }

 

转载于:https://www.cnblogs.com/767355675hutaishi/p/4078447.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109669.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • sftp常用命令介绍_手机命令代码

    sftp常用命令介绍_手机命令代码一、SFTP简述二、SFTP服务配置(基于CentOS7)三、SFTP常用命令四、Java代码实现SFTP操作(JSch实现上传、下载、监视器)源码请见Github:https://github.com/qiezhichao/CodeHelper/tree/master/j_sftp五、踩坑记录一、SFTP简述sftp(SecureFileTransfer…

    2022年4月19日
    52
  • Python生成可执行文件exe

    Python生成可执行文件exePython生成可执行文件exe一、安装pyinstallerpipinstallpyinstaller二、使用pyinstaller命令使用示例相对路径在程序目录中,运行命令pyinstallermyscript.py则可以在当前目录生成两个文件夹dist和build,exe文件在dist文件夹中。绝对路径在程序目录中,运行命令pyinstallerC:\mys…

    2025年5月26日
    3
  • Json的常用方法[通俗易懂]

    Json的常用方法[通俗易懂]Json的常用方法

    2022年4月22日
    48
  • JS数组合并(5种)[通俗易懂]

    JS数组合并(5种)[通俗易懂]前言项目过程中,经常会遇到JS数组合并的情况,时常为这个纠结。这里整理一下。简单而实用的for最容易想到的莫过于for了。会变更原数组,当然也可以写成生成新数组的形式。letarr=[1,2]letarr2=[3,4]for(letiinarr2){arr.push(arr2[i])}console.log(arr)//[1,2,3,4]arr.concat(arr2)会生成新的数组。letarr=[1,2]let

    2022年6月30日
    43
  • 自己动手,丰衣足食。普通键盘实现键盘宏(Windows和Mac版)「建议收藏」

    自己动手,丰衣足食。普通键盘实现键盘宏(Windows和Mac版)「建议收藏」很多高端机械键盘,支持宏定义,例如我们可以设置”D”键为”dota”,这样当我们按一下宏开启键,再按一下”D”键,就等价于分别按了”d””o””t””a”四个键。这时就可以把一些敲代码时常用的模板定义成键盘宏,到时候一键补全代码,既高效又装X。另外,玩游戏时想按出“下前下前拳”这样的组合技能也容易多了。那么问题来了。。山里来的买不起机械键盘的穷B同时又是程序员应该怎么办。。其实这…

    2025年7月6日
    6
  • Mysql之Linux环境下如何彻底删除卸载Mysql

    Mysql之Linux环境下如何彻底删除卸载Mysql首先连接操作系统,切换到root用户。一、如果是使用yum安装的mysql,使用如下命令进行卸载(不能确定使用何种方式安装的mysql情况下,按后续步骤一一进行处理即可):#yumremovemysqlmysql-servermysql-libscompat-mysql51#rm-rf/var/lib/mysq#rm/etc/my.cnf使用rpm-qa|grepmysq…

    2022年6月18日
    37

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号