Sorting It All Out
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 26911 | Accepted: 9285 |
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.
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.
Source
East Central North America 2001
AC代码:
#include<iostream> #include<vector> #include<stack> #include<algorithm> #include<cstring> #include<stdio.h> using namespace std; int n,m; int in[30],tmp_in[30]; int f1,f2; int str[30]; vector <int> G[30]; void top_sort(){ //拓扑排序 f1=0; //没有环 f2=1; //唯一排序 for(int i=0;i<n;i++) tmp_in[i]=in[i]; stack <int> s; while(!s.empty()) s.pop(); for(int i=0;i<n;i++) if(tmp_in[i]==0) s.push(i); int counter=0; while(!s.empty()){ if(s.size()>=2){ f2=0; } int tmp=s.top(); s.pop(); str[counter++]=tmp; for(int i=0;i<G[tmp].size();i++){ tmp_in[G[tmp][i]]--; if(!tmp_in[G[tmp][i]]) s.push(G[tmp][i]); } } if(counter<n) f1=1; } int main(){ while(cin>>n>>m&&(n!=0||m!=0)){ memset(in,0,sizeof(in)); int i; for(i=0;i<n;i++) if(!G[i].empty()) G[i].clear(); for(i=0;i<m;i++){ char ch[5]; cin>>ch; G[ch[0]-'A'].push_back(ch[2]-'A'); in[ch[2]-'A']++; top_sort(); if(f1){ cout<<"Inconsistency found after "<<i+1<<" relations."<<endl; for(int j=i+1;j<m;j++) //注意这里要输入剩下的信息才干退出 cin>>ch; break; } else if(f2){ cout<<"Sorted sequence determined after "<<i+1<<" relations: "; for(int j=0;j<n;j++) cout<<char (str[j]+'A'); cout<<'.'<<endl; for(int j=i+1;j<m;j++) //注意这里要输入剩下的信息才干退出 cin>>ch; break; } } if(i>=m) cout<<"Sorted sequence cannot be determined."<<endl; } return 0; }
版权声明:本文博客原创文章,博客,未经同意,不得转载。