本帖最后由 厚积薄发 于 2010-5-6 18:40 编辑 % r3 p2 I% y. }% }# ]: c$ j I/ V
& r5 o6 V* R8 i& u+ R |2 _5 m
Sorting It All OutDescription1 K# i+ m! s% k# `8 M. T8 x% P; Y8 [
: G5 a4 t; @& dAn 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.
( ~9 s' S8 }- a0 [5 R, T- A% y8 fInput
! r4 g* a& J4 R3 m1 X" r
# R+ s# _5 m" D! d AInput 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.! b7 B0 \- R4 T9 H/ [" p' @% M ^
Output( T) e" E0 y& [' K7 g; F
. t2 m) M/ R, B0 c, U" `' {
For each problem instance, output consists of one line. This line should be one of the following three:
. L7 Y+ E# z+ c7 M- i% g
' K. C- b" w% m6 Y) k$ JSorted sequence determined after ** relations: yyy...y.
5 F7 [& _* i0 S9 y# A' VSorted sequence cannot be determined. / ]! d2 S* I; ]. }8 k
Inconsistency found after ** relations. i1 e6 W8 q9 Y% f2 f( s
9 S. x; J. j( Mwhere ** 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.
3 m; e: {$ [9 u' k: W4 g1 I1 k2 g8 z: [; O. R0 ]
输入样例
4 ]8 N) a! m$ W4 Q( C* J2 }4 q4 6
8 O2 G/ P, t/ BA<B3 R) V* ~$ t0 ^; o8 |& M9 i; l
A<C( T) E- j0 I$ r E+ p5 b" B
B<C
6 G+ T0 g# M1 W6 R% KC<D
3 u5 S2 Y u O2 r; ~) k8 p. H7 ~B<D4 {0 s, i& A. @$ c
A<B& Q. i, Q6 F9 i1 _, O
3 2* N1 U& H: z( F+ [) J5 {( |/ D( k5 }
A<B
$ Q7 G* o/ r; N' I5 EB<A
( @6 k. `5 T0 c2 {( {26 1
8 T- {; g2 Z( M# g. M5 h/ V4 C5 yA<Z* B% H; K& I& N( y! i
0 0: q' H; X& s" Q, E$ j
( |. H' p p0 j z/ `+ x1 y输出样例 * S" K' M9 g! l" {2 R' g( m c. r
Sorted sequence determined after 4 relations: ABCD.
+ \, a+ ]( S; A# i2 X0 KInconsistency found after 2 relations.
7 ^: J) P* k. I) ?0 V- a# r# uSorted sequence cannot be determined. 8 L1 j5 y$ q1 }7 g, Q/ `+ {. F0 Q
Source
7 R4 Z3 t, T; f# d% W, I- U0 y+ p& q& H3 W+ {9 B. Z2 x
East Central North America 2001
7 Z# e! E, L) L4 s2 Q$ Q+ o* Q0 a- C- c程序解题1:
5 |3 W9 P5 W Z( p* J$ u//By Jackie Cheung, X% H. G) t# `
#include <iostream>
, J3 a+ Y! {- P$ y" e4 _* N. d) b#include <string>1 h! @/ k1 R& |7 O- l. i
#include <cassert>
U6 o8 w3 }% }3 o8 R, @' [# ntypedef struct tagNODE 1 S* s* _* J2 d0 e6 X# d
{+ Z8 p/ l& j* E( L- r
char val;! g3 p# b9 |7 C: O
struct tagNODE* link;
! v5 p: w0 r' `9 N/ u. M* _4 l2 U}NODE;7 g* `! k$ c) _) y3 r- b* t/ }$ Q
using namespace std;
% B# y$ z; W! x% r7 Gvoid Marshall(bool** arrary,int n)
/ z9 \2 C7 Z, T) j+ W( J{
' u6 I R; C% F/ s1 M$ V# [ for(int i=0;i<n;i++); B/ G' v9 l( b4 K' Z0 u
{
4 U4 p5 V9 ?9 J. S: g9 t9 q for (int j=0;j<n;j++)
8 a7 M# Z. F; t {
9 q( l5 Z* w G+ G4 m! d( R if(true==arrary[j]). {4 U, b9 F _6 p1 ~# x
for (int k=0;k<n;k++)4 ?7 g- \" V8 a# C( p4 N6 d! u
{1 K2 e) s0 J$ \
arrary[j][k]=arrary[j][k] || arrary[k];
; _8 S3 A# \% o b3 ~ }
7 x2 Q; d) i; U- q6 U+ ?1 q* S }
" V3 x* y3 o6 k* R7 |% O }( y# r& t+ ]( V, C( [2 V- z
};
% t g; A5 k7 Hbool SearchForRoute(bool** array,char Seq[],int nLeft,int nIndex,const int n)
, l0 M/ K A3 {. G8 e{
9 n( W: @8 f' L7 {9 @* { Seq[n-nLeft]=static_cast<char>('a'+nIndex);1 m9 R. t& ^) R; a1 [2 U3 f
bool bFlag=false;) u. L+ i: N9 _7 T" k) ~# e
if(1==nLeft)0 l! m" u# K7 Y8 H" B
{+ g7 [0 V, {9 e! n
Seq[n]='\0';( J, C( v1 W0 j0 N, `
return true;
$ Z- s# z7 y+ J, J, g }
5 r! b4 L% u3 b for (int i=0;i<n;i++)
) J$ A: R* R; _4 U& {( x" ~ f5 Z {
- a/ y5 `8 [% X$ a) [ if(true==array[nIndex])
4 s3 ]3 r" T& v2 | {' X3 E3 d; V( ~* Q) k% n$ I& o
9 _5 V1 l- H8 o0 z. I4 G
bFlag=SearchForRoute(array,Seq,nLeft-1,i,n);% Q _8 ?( O! T# ^$ h: _2 {
}; c. x; ~ N5 i2 ?# { g% a3 ~/ m
if(true==bFlag)
6 { B. }- N. J: v return true;
9 Q6 } X' c3 c; @ }% `7 k$ d' y6 ?" n [0 H# X
return false;4 R) {: ~3 e# U( g( \6 }$ o* m
};+ Y& V! d5 G: A
int main()6 M; f/ B3 w" `% _( o# ~
{7 j" F# B/ \% c+ V# I- x9 _ L
int nSeqLen;
& _+ { k. I8 a8 O( r: v, j( [ int nRelNum;
3 I* M- @+ \: r- C2 |! z9 L3 m& e" N4 r cout<<"Input the length of the sequence:"<<endl;
6 l% p" g E& H) v3 P% V cin>>nSeqLen;
4 c0 t6 |& s+ P% ?$ z+ A# s" r cout<<"Input the number of relations between the elements:"<<endl;& R/ G+ c" m* x! L$ S( p
cin>>nRelNum;7 q! x8 v0 _' G" G- }
//1:if nRelNum<nSeqLen-1,then the relation can not be determined!
0 H; v6 B$ h! O0 E( `; L8 E if(nRelNum<nSeqLen-1)
, D' J8 {& N7 X1 O2 E' e5 u {
* l/ y, F- B0 O2 E7 K cout<<"The relation can not be determined!"<<endl;
& T% J; g! Z8 M7 k* K9 m; I P6 e return 0;. u( x$ X- d& D+ J; G+ o1 N4 H) b
}9 T8 h7 K. S4 u) e- c4 ^
string* strRelations=new string[nRelNum];
" \2 \( z b4 e Q j; x6 ` char* Seq=new char[nSeqLen+1];6 _! d1 R9 D$ ?8 ^. ^/ h. H/ s
bool** array=new bool*[nSeqLen];1 x' L, z, ~3 Q" h3 i
5 h8 }2 ]+ n' i7 O" Q* I for(int i=0;i<nRelNum;i++)$ u, @: l1 ` o9 J; W' G) F
{
* ?+ H D+ L/ g2 S. k) ] cout<<"Input the "<<i+1<<"th relation:"<<endl;
- o/ }0 O! ^1 Y! z' [6 L6 v cin>>strRelations;+ Z3 O7 R/ e# _1 F
}
& M0 W x) x0 i! c / ^% Q9 I( @2 p- p; \1 b
for (int i=0;i<nSeqLen;i++)
+ Z8 E' F1 D+ I3 r {* {& ^9 ^: f0 s3 |" U, L) m
array=new bool[nSeqLen];: i* ?* ~4 {! z+ }5 N0 K( I- L/ h/ k
for (int j=0;j<nSeqLen;j++)
N! U; ~4 y( c array[j]=false;& m% a+ T3 T; v5 E8 H
}
+ i7 Y. u+ A, ~6 X( X) G$ [ //The main loop% ~* H8 L/ S+ ?* P& j- ?: I+ ]" [
for (int i=0;i<nRelNum;i++)
, E; s E- ^; m3 w ~$ @* I& U! H {0 E3 F% L1 X: \& O
char a=strRelations[0];7 [) W4 s; L# F! c5 y7 l
char b=strRelations[2];
0 Y X: T# d; `$ ` assert(a>='a' && a<'a'+nSeqLen && b>='a' && b<'a'+nSeqLen);
% t2 n. w4 O! A5 F, i array[a-'a'][b-'a']=true;
! d2 w/ D- o: _' y* W! H6 w* T: \ ]! u, K5 R3 K; }, F- s1 T& F4 q
Marshall(array,nSeqLen);
3 m7 F& I; i3 _; y% r
( l# L4 j# P6 J4 k* P7 ]" _- d$ } //Check for Inconsistency after every relation$ J0 y, a3 l$ @/ Z b7 }
for (int m=0;m<nSeqLen;m++)+ z* P9 B |, K' z$ t i
{
% Q) u7 u3 A& W2 F5 r: ? if(true==array[m][m])& m1 P! D$ m: {- ?# F4 p' a
{! e" N- _+ r' z* ?0 A9 b
cout<<"Inconsistency found after"<<i+1<<"th relation!"<<endl;/ H- T9 e: m! G) l* T
delete []strRelations;
, _0 B0 q, |( F" D' p6 x% F) S4 O& V for(int k=0;k<nSeqLen;k++)) [' ]8 B/ }1 c+ j" w" X
delete []array[k];% H5 E3 }" w @ U h
delete []array; E8 g5 F$ e. j: l+ p' [
delete []Seq;
, E) s( ~6 R% B+ z return 0;( c2 J6 I) q0 g& I! ~7 s
Q5 V7 f% ^+ k5 F' e
}
6 M! A2 Q9 m6 s5 ~1 \3 Z/ G- L }
2 W2 v$ G8 B6 v, Y; n0 G5 L
+ ~" i. ?3 `% U2 x: j- Z3 Y //Check for the determined sequence after every relation
: }( P1 T; n8 h7 C) B for (int j=0;j<nSeqLen;j++)
9 I5 g4 N6 e1 H' r: W( ] {
" D9 k& `, x ]9 V if(true==SearchForRoute(array,Seq,nSeqLen,j,nSeqLen))
/ e y' q5 c z; a {
- ~; ^, O/ E1 g! ]( y cout<<"Sorted sequence determined after the"<<i+1<< "th relations:"<<Seq<<endl;
& @9 R P8 C, C) C- k delete []strRelations;# J) M- x+ Q7 ]. q9 A0 @# e
for(int m=0;m<nSeqLen;m++)
; s3 O* g3 l; w p delete []array[m];
+ E9 E. Q$ l u/ l3 z delete []array;0 j Z6 @! y' B( |7 g. d
delete []Seq;
3 z, ^5 p+ r$ V- U1 s8 S: f" p return 0;
3 C; ?' \+ F, ]6 t! T }( E, Q9 f" F4 I/ P/ A
}; U) @" w# w/ [0 r" r" s4 J! R8 {$ P
: B/ u; @; s# f' m6 `/ X: E+ Y. w# ~* g. y+ f( |7 S
} P j& b! N' d& y1 |; x! ^0 c1 R
//If the program has come to here ,then the relationship hasn't been determined!!!9 r# z: ^8 ~: k V9 S6 ]6 t2 W# E
cout<<"The relation can not be determined!"<<endl;
7 a% u2 b h5 h2 l& r delete []strRelations;* {9 X& y8 }4 m( G9 n' m) D/ |
for(int m=0;m<nSeqLen;m++)$ B1 Q' s' `. }) a. h
delete []array[m];4 V! g( T5 v6 P/ o# k
delete []array;7 Y. C6 j0 `/ @# \; t9 [
delete []Seq;
$ b$ t; E5 R4 _5 y1 T2 b8 D- m d$ C
4 u% X& i% ^- d. a6 ?) r% k return 0;" l, G3 e7 N, n `* |8 i+ R& U
}1 O$ k I# o% Q
& k; T/ |6 O# L* w1 Z程序解题二:#include"stdio.h"
, N3 r7 ? A5 o# evoid main()1 [- g. J9 W( I/ Q; }, H1 |
{" l2 w0 e% o% |( j# v
int n_m[100][2];. ~/ `3 Q, h0 ^
char re[1000][3],
# d) Y1 s2 k6 Y& D3 } temp[26];; L" l5 m0 ` q6 @8 N
int i=0,j=0;
& |/ B/ B' h! M+ `5 s! e scanf("%d%d",&n_m[0],&n_m[1]);/ r: A% m; k Q8 D9 z
for( ;j<n_m[1];j++)+ u" a0 X9 T- h& r$ ^
scanf("%s",&re[j]); E" f* l+ x. O! ]4 z! B/ h
while(n_m[0]!=0&&n_m[1]!=0)
/ L( O/ y7 R0 @- _, t. Q' l {
- _( R5 j6 I1 H. F2 U- x i++;
/ z B, z" y# J, O8 b scanf("%d%d",&n_m[0],&n_m[1]);
% b( `* i" k. U% u" ]$ q$ [' H7 { for( int f=0;f<n_m[1];f++,j++)+ z6 o& ~& B% A ~8 x) F
scanf("%s",&re[j]);
# ~/ @1 B' q5 w, `- l6 E9 R( X6 x% p }) v+ G6 \2 j- |' p8 O
i=0;, k/ x! e( p1 @: h6 z8 k1 g
j=0;
8 w% c: S" Q: K, _4 { a for( ;n_m[0]!=0&&n_m[1]!=0;i++): L9 L2 G u4 ~4 s- ]; Q
{+ Y3 j/ Z+ Y1 c! V% h
int a=0,b=0,l=1;7 u6 u. u- Y; n8 F' ~; ^$ R
for(a=j;a<j+n_m[1]-1;a++)8 n) Z0 N0 A& g0 B( _
for(b=a+1;b<j+n_m[1];b++)
/ Q) D0 V" z6 V {
, V! t2 x1 X# E- W Y s if(re[a][0]==re[0]&&re[a][2]==re[2]&&re[a][1]!=re[1]||re[a][0]==re[2]&&re[a][2]==re[0]&&re[a][1]==re[1])
5 B$ Y( q) k; ~+ d5 b$ f {* U) \# w3 v8 h) i( W' I) ^% A
l=0;. t6 g' ^) X. _, P
printf("Inconsistency found after %d relations.\n",n_m[1]);) M/ P" X; x. E, r, X) Z* k
break;
, t/ {5 G) }6 I }
& i& E0 @' ^0 [ }% v. z+ N: E+ {( K& ^) R6 L [. z
if(l==0)
2 ^4 r3 j4 x) {3 e- @ continue;//Inconsistency found after x relations.9 L+ t( M3 D4 Y4 i
else{
2 B% g7 r3 m7 O) _. H+ J if(n_m[1]<n_m[0]-1)
* h8 c: }1 E* S& K% b {
$ j8 y/ N, K9 D+ m8 \% a printf("Sorted sequence cannot be determined.\n");0 f9 ~; t- Q: P" l6 Q/ a
l=0;
, s0 j* Q% _+ p! n }
$ U# S: J0 s% a/ c else9 [* k' k2 ~; Q: X9 y
{
7 _) M: O. w3 J/ j; {# B( h+ t if(n_m[1]==n_m[0]-1)- H1 _0 F8 y4 ] t6 l* P; g4 x
{ 4 i9 N' B, [7 t& h9 J9 } v; \
int k=0,p=0;( N# Y3 C- a. F0 f
for( ;k<n_m[1]-1;k++)$ l" N8 h5 `, z
for(p=k+1;p<n_m[1];p++)
/ L6 P1 F, m2 X5 p if(re[0]==re[0]||re[2]==re[2])
6 N, e. q- o: g& P- i {
8 f8 U& q- Q! `1 T1 v9 _/ V: ?" } printf("Sorted sequence cannot be determined.\n");
6 ?& E) D3 @0 A# Z; R7 |0 i- }8 } break;
( j1 h/ O4 {( T3 I3 O* M/ z l=0;2 o0 |2 j+ K8 e* Y! [/ U# U, I4 d i
}
6 D7 \, m: g; B2 T% Z }" I5 s5 ~. r* R" L$ r2 H
}; B- b5 q- ^0 V
if(l==0) 3 R3 l) l% J$ n# Y6 V0 \) \9 n. j, q
continue;//Sorted sequence cannot be determined.
+ Q7 b% O- m3 u) A5 f# `* O1 ~+ `2 n$ h6 S4 c% _) v" c7 j
else3 p W K7 H; z, j+ D' [
{
; S5 @. R8 z/ N! |: [; e9 \ 7 j2 L, D" c- B' G( W& L6 Q
for(int k=0;k<n_m[0];k++)% m6 k+ ?' S, y% N9 Z: k& A% v
temp[k]=k+65;- G! E2 B$ c O3 L5 @
for(k=0;k<n_m[1];k++,j++)- c- R* v" U" _- e( a b( t
{- K7 ]/ W* D( |/ Q: x. I ~
int t1=0,t2=0;
; l% u1 q4 H- i4 `* I# Y for(int s=0;s<n_m[0];s++)
0 |7 R5 E5 @0 F' q {
$ D7 Q* ^8 ?4 R8 q W2 t if(temp==re[0])
1 W) G& L" |; w& m- |. w t1=s;: e& w& R4 |1 x; |# I ~7 A4 A
if(temp==re[2])
3 n# N' b- S* d3 o- d t2=s;
4 h. N! F0 ?0 u1 _ p6 I }/ t8 N7 O( g& a6 c
if((t1>t2)&&re[1]=='<')
0 \% i! S) z, @' h" D; t {
t3 O2 Z; ^2 }" O; N$ F( r# P4 a char t3=temp[t1];' ]; d7 n% Q0 W" o. `, C
temp[t1]=temp[t2];- G) Z% E% \" M$ @$ |
temp[t2]=t3;
8 l! k4 D; [( r! } }
. V8 Z( v( x! k0 K. l! s, [' q }- {8 q+ R8 u9 [3 g% [" i2 Z
int count=0;
% ^# e! _9 E3 e: T. j) e$ f for(int s=0;s<n_m[0]-1;s++)
2 r/ ]- f& h/ j" R for(int d=j-n_m[1];d<j;d++)
& E- Z8 N) m7 F6 w if(re[d][0]==temp&&re[d][2]==temp[s+1])
& R" n0 }& }" ^" ? {, p7 u% b/ {, U; d
count++;
" r- ?/ D" e# z* [" R break;& R3 P3 r$ w& z' v7 b- t
}& `) k, S- `$ \4 r( p$ e% ^
if(count==n_m[0]-1)9 c% k* |& x! o) C D" j: m( `( a
{
$ {% C1 R/ ^( v, r$ D printf("Sorted sequence determined after %d relations:",n_m[1]);5 t. F& `/ q+ p! q
for(int f=0;f<n_m[0];f++)
9 D) Y0 D8 a* P6 G$ i1 }" ~ printf("%c",temp[f]);( } V- z+ _- ?& C1 p
printf("\n");
7 _% ^: l$ w& m6 z6 u! C' A1 _" L }7 y* f2 N2 k% P
else
' T$ }+ P! B1 i8 l# N8 S printf("Sorted sequence cannot be determined.\n");
6 c" B5 H* X% M9 c# t) _2 m }
' r$ x1 w" V; y$ h7 y4 T }8 z( |) ^0 B4 w0 F. X/ r5 u
}( M2 } |! C" V6 Q3 y
}
1 W m3 y) i K ?$ ~
# e ]. V3 ~. G" H/ I1 z9 ] z* w, z. H& S
" x, @4 _% N/ B% `4 S% j: ]5 _0 I1 f5 `8 n7 a0 d+ ^
5 K( E+ I5 v# e( M2 ?
6 F0 V# m% `* N7 ]( v! `
7 _6 J2 C, @% E8 D0 x
" V$ X3 U, N$ @$ ~+ B' G, K9 t$ t来源:编程爱好者acm题库 |