本帖最后由 厚积薄发 于 2010-5-6 18:40 编辑 $ Y& j1 N! u4 k0 ^) {7 q& J, }
: e: Q6 [$ c" \9 ?6 }" L- j
Sorting It All OutDescription5 F% @+ C- q4 [3 a
T8 u# j0 g' o; t/ E1 }: j3 qAn 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. . A5 ^: `9 C m1 l
Input$ O, C. m( d' u7 a1 C) L
$ M& W3 @. Z3 HInput 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.
7 j T1 W" M# _0 POutput; t3 n" [, `$ X: J4 g1 x
: U& j Z- L( X$ L* g8 S2 b! W0 RFor each problem instance, output consists of one line. This line should be one of the following three:
) \$ i$ V- ]8 |6 w& D2 ]# ?
1 q$ [! n/ y1 _1 q6 n4 HSorted sequence determined after ** relations: yyy...y. & q5 P$ Y5 Y8 f* O/ x' ~' m
Sorted sequence cannot be determined. + a, \! P% N$ h s
Inconsistency found after ** relations.
% ~8 c3 V2 C" M1 J: i
/ R9 T/ R9 ~7 t: ywhere ** 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. . z$ w& k. a0 n. ?. N
' T5 `+ U: R; u输入样例
R A1 S$ m8 G3 d+ W- z3 n4 6, x) n! N: D7 G+ |7 L2 T
A<B4 k( A; @" E* J: M# ]; U
A<C
. W( ~( W B9 ?- D2 UB<C
8 o* T# N% O5 F- f1 o) U& U: hC<D
s9 h: B/ | mB<D
/ w5 k3 D: Z G) l2 V: y, FA<B% R0 T# f- i* ]' Y
3 2
1 [5 f1 c# I& x7 G9 M5 M5 h9 OA<B
9 ?9 G' C8 @+ ?& `% QB<A
& h V1 O$ z7 g0 V* V26 16 H$ H7 B" S0 @% _, i i7 V
A<Z* J* K4 Y/ C; H. L& F9 C
0 0
" D8 r8 R* U' V9 j2 \- \6 ?
, Z# [1 j* v4 {5 S输出样例
; w0 F: [) O4 |& FSorted sequence determined after 4 relations: ABCD.& r$ B5 f, S* `
Inconsistency found after 2 relations.
7 Z# @8 s3 t; c6 oSorted sequence cannot be determined. " t; P2 S c5 p, k$ f6 @* a
Source) g' D2 o2 ^5 w( l, I! `' m) z3 w
2 x5 d0 v0 f* M" pEast Central North America 2001
2 x, A( j; k2 A. \ I程序解题1:
3 m% C) B; i9 u W. u3 k: n//By Jackie Cheung4 _) R* l, m) P) H( p& \' g' }
#include <iostream>
/ h @$ z5 w( S* _; ]#include <string>
% ]; E) t+ t+ Y6 Q" ?% W#include <cassert>
$ d, ^! S% [3 T- |" ^8 Y$ Otypedef struct tagNODE
) D& l! O) n* Z{- n, k% N2 \8 C% G
char val;
" l& o, q' i9 m9 ]. E4 q struct tagNODE* link;, A- V8 Q0 B) G! Q/ W
}NODE;
" P% j2 E/ g% f7 c5 I" ]using namespace std;9 C7 @- l9 c* [$ M3 E& Q8 @0 S
void Marshall(bool** arrary,int n)0 K' ?- K# ~1 J$ E
{
! t2 E5 q) a/ u* i$ N% e. W+ w for(int i=0;i<n;i++)% Z+ }( Y. w5 N4 Z- b" v) \7 p
{. A- o- ?/ h1 C" w" A: u; m
for (int j=0;j<n;j++)
* k" I/ F) K: z L$ e$ J U8 U; o {
: B! B# x% G% t! E& a0 Q9 H% v if(true==arrary[j])8 P2 x7 A: d! ~: k5 R
for (int k=0;k<n;k++)- E2 c; _2 [; Z' Z; I
{
8 M& H2 y6 H7 _9 `% E$ e arrary[j][k]=arrary[j][k] || arrary[k];3 a4 F5 `: T; I% w1 o% O: e
}+ X8 X. N- L: ]1 e# t+ _; ~
}
0 r. N9 R) C0 N7 _9 G! z/ M }
( p: k) ?) J' r; K$ W; ~& m};) J' Q6 n6 @5 ^) D
bool SearchForRoute(bool** array,char Seq[],int nLeft,int nIndex,const int n)
5 c2 O+ D. u! ~. m+ p9 n4 i{- B. D0 D" Z6 |) S( `
Seq[n-nLeft]=static_cast<char>('a'+nIndex);5 k ]) J0 q! V: K% K8 A0 a
bool bFlag=false;
3 H+ {2 d# w2 V3 Z- } if(1==nLeft)1 {5 q4 u& s t
{, Y. {' P5 O+ X
Seq[n]='\0';
2 q9 I+ O4 ~1 g- m+ V" h Q return true;# O6 J- @3 D3 m: \2 ?) S# w
}
, [$ F: h. @7 c# X0 }9 s8 d6 Z' X7 R/ y for (int i=0;i<n;i++)
' M# o; F" a: ]1 t! M; t {) f: A3 P( _( k
if(true==array[nIndex])4 g6 p! v0 @+ k5 d8 g
{
! H# Z+ |: x) J5 f) b
. [7 U+ L! q; S" c. x, j bFlag=SearchForRoute(array,Seq,nLeft-1,i,n);: R6 i/ B7 t) I$ v; M' ^
}8 \" {5 R# M8 t# h) Z$ K% z
if(true==bFlag)2 m0 y" F E" j* w
return true;
" P9 e% ]1 X; [ }% H9 m. p7 P: \4 C; W! Q# c1 i
return false;/ j& J+ ~6 J, J5 b# P+ r
};2 z0 Z) M! D. H c* Y5 g
int main()% y5 }3 S( A9 y: R, o
{
2 F; T9 I6 S7 l# y int nSeqLen;
1 z1 @% o- X7 D7 \$ L! t I int nRelNum;, a; U8 z3 w x; J# N/ {( ?
cout<<"Input the length of the sequence:"<<endl;
/ D; s. t- f6 h6 @( J5 a0 F cin>>nSeqLen;( S) u" y, k1 Q* j/ _
cout<<"Input the number of relations between the elements:"<<endl;+ r6 L, l2 t, u$ m
cin>>nRelNum;+ S2 H8 c% ]4 t0 ?1 x0 H$ J
//1:if nRelNum<nSeqLen-1,then the relation can not be determined!
4 @1 Y; u2 o8 N) a7 V& b" t3 x if(nRelNum<nSeqLen-1)
) F# f) [! D: K; u6 {( s6 L4 H" H. D {
4 v1 i9 t+ G* c cout<<"The relation can not be determined!"<<endl;
, ~3 ]0 i: c7 } ?; c9 o return 0;; F' _; O6 R9 M7 g* Q
}- E" K4 i" Y2 a0 v4 I6 D, f
string* strRelations=new string[nRelNum];; Q" B+ O3 Z g! k$ k
char* Seq=new char[nSeqLen+1];
5 L5 [5 h7 n8 w2 i; ? bool** array=new bool*[nSeqLen];
. U# a r% W5 ?; S2 e2 @% N0 [% ^9 j9 K0 t" C' \% `' y# |* F: z# Y
for(int i=0;i<nRelNum;i++)* ~- E- ^/ K. E+ y" \: j) K6 ~1 m
{
5 ]2 n" \! M2 @1 i3 `& S cout<<"Input the "<<i+1<<"th relation:"<<endl;
; _7 ?& y! k# e9 r' A. X cin>>strRelations;. V* k' z$ h, j# @. V2 b6 ^& }) i
}1 \! Q' I! Z- S+ V" [: S' Z
' u* F/ ~ I, x" |; \, i2 e% M
for (int i=0;i<nSeqLen;i++)
5 U& `( h5 K: g {
9 E* n, ^1 T. r% K% t/ W/ j array=new bool[nSeqLen];
& X2 u; m, V! V( x( s7 Y# t3 @7 a8 F5 n for (int j=0;j<nSeqLen;j++)
" z/ W; Y) I3 C6 |) ` array[j]=false;
9 V& M5 w6 d( y9 O/ } }4 w: n3 k9 ?& Y. d6 C# L0 U
//The main loop
% |4 a* a' l% M9 k) B for (int i=0;i<nRelNum;i++)4 q7 k7 p# V: h* |3 x! }; m1 p5 k
{$ t |/ P1 O7 J6 k/ @
char a=strRelations[0];% t/ x5 L6 }" U1 y. z& a
char b=strRelations[2];
l4 Q9 I" F) _/ J assert(a>='a' && a<'a'+nSeqLen && b>='a' && b<'a'+nSeqLen);" w! W. X0 t# ^
array[a-'a'][b-'a']=true;
4 L9 m0 C8 ~0 _$ A' M9 e
! Q6 ]& P( W C0 X Marshall(array,nSeqLen);' h# i: I, {. s) E5 Z; q
: p: d3 A2 }; l0 }# @$ c //Check for Inconsistency after every relation1 E6 g! a$ I. Z
for (int m=0;m<nSeqLen;m++)
: y6 X0 g/ w+ G {
% V& U8 `, Q* b/ T9 N" A2 q if(true==array[m][m])
' h2 Z$ O, O' s$ T; _ {* p2 b! L! c7 r8 Y8 k* P( [# Q, g
cout<<"Inconsistency found after"<<i+1<<"th relation!"<<endl;
- V; L# @" m4 K) j5 i* V delete []strRelations;* j8 d1 O* I) x! f3 J4 f
for(int k=0;k<nSeqLen;k++)
5 k- U8 z$ U& T) }. k6 Z/ h delete []array[k];
& w7 A: o& r3 [" T' l/ f) M- a delete []array;- ~5 d# F7 f+ o. _
delete []Seq;$ x+ k. A! f4 h" e1 e' P
return 0;
- e; E; [ m+ Z$ Y1 F, g6 L! z5 J, F% N0 D% ^
}
3 s% h# v) T' j& Q: _% G }$ ?: ^! O0 ^" ?$ C _( H$ S. R+ y
% U# |4 [' K* Q5 k* H. P" Q
//Check for the determined sequence after every relation 2 l0 F0 f9 }: G: u
for (int j=0;j<nSeqLen;j++)1 X8 J3 I- `" ^/ k7 j
{
. g' T) d+ V! E! \* f' h! r! s4 x if(true==SearchForRoute(array,Seq,nSeqLen,j,nSeqLen))
/ p& V4 m5 f( |' G; O {3 v5 A, b) q+ I7 R3 I0 a3 G4 ~
cout<<"Sorted sequence determined after the"<<i+1<< "th relations:"<<Seq<<endl;+ |6 \6 G2 V) ]5 O ]" N
delete []strRelations;, G* t( S5 B% g; ?7 `' n4 |. T& H
for(int m=0;m<nSeqLen;m++)7 ~1 @2 ^8 U @3 D
delete []array[m];" G! `; ^" \5 p( b
delete []array;9 x4 ^/ v0 N2 b' _. D7 i
delete []Seq;9 Q( X- b, _4 Y
return 0;" W5 P) U8 d/ H+ ]2 [ o
}
4 W( ?% I$ O4 Q& Z+ h }
. k- t2 B& U; u% B( R
" F3 _ R9 ]4 ?$ Q0 v+ S; m( z* b! F$ G7 y
}
t) r8 a! O( F8 z6 F; _ //If the program has come to here ,then the relationship hasn't been determined!!!
/ |9 n7 }. c. u+ h0 n+ q/ S" A$ u3 h cout<<"The relation can not be determined!"<<endl;
0 L1 f% z7 q8 q( W delete []strRelations;; k0 G. V5 V$ P" L2 k" P
for(int m=0;m<nSeqLen;m++)( v! M5 |0 y# O3 Q# S
delete []array[m];. K1 s6 L& e: H7 b$ V- K
delete []array;
& q9 s* m/ n" z8 N X delete []Seq;
3 B5 q9 Y# X) A4 u: p
7 z' ^! D& H/ I! h. p- X8 E return 0;
, j, `" h9 Q8 B7 y: H( e}5 h; q& V. M3 R" s8 \0 }! r
$ Z9 O$ F% c, f0 w; z' H T- W) n
程序解题二:#include"stdio.h"* n, O1 d7 d7 i; M
void main()" @- O+ @+ P" L. Q
{
4 _( K2 T: a- L5 \$ V) n' j1 \, O int n_m[100][2];
: z' v1 `+ j# A% [7 x3 u3 _ char re[1000][3]," r: B4 S# u S# u R
temp[26]; o+ A3 R: p% g2 {/ [
int i=0,j=0;! H* Z& E& Y! @9 Q* K( a$ e
scanf("%d%d",&n_m[0],&n_m[1]);
" A2 O% c7 k' D4 _- `8 G for( ;j<n_m[1];j++)
4 U' E/ d% A3 L& f9 i scanf("%s",&re[j]);2 g* Q, }( U: X( p
while(n_m[0]!=0&&n_m[1]!=0)
. t& r/ ?$ N) H; \ S! C8 ]) K {3 u5 m+ ]' L* `1 l- t
i++;- t) R8 p3 V, ?
scanf("%d%d",&n_m[0],&n_m[1]);
8 s$ s5 S$ k5 y* ?+ M for( int f=0;f<n_m[1];f++,j++)# q8 ]5 h$ W1 H1 T- P$ A
scanf("%s",&re[j]);' \0 ^4 g3 |! U& Z/ P& w4 o" T9 f
}& I. u0 I7 G5 Y" L. f2 x3 s
i=0;& i/ V) \" B( X. x1 z* ^/ w6 X
j=0;
3 s+ H/ W" U& @5 D G Y for( ;n_m[0]!=0&&n_m[1]!=0;i++), B6 M3 w0 @6 v2 b) K4 R8 Y
{3 i7 q$ h& Y: P& B! m* z8 V
int a=0,b=0,l=1;, L% i" a9 a9 D$ V5 B' r1 M N
for(a=j;a<j+n_m[1]-1;a++)
, R) Y h0 l* C for(b=a+1;b<j+n_m[1];b++)' R& m( U l0 t% ~. \1 h' m$ N
{1 G% y2 I- |* [$ h* G
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]). p& B5 r3 Z1 d1 j
{
$ n2 e4 B, e8 O l=0;
- h2 D* b. ]: i# H$ Q8 i. P3 h printf("Inconsistency found after %d relations.\n",n_m[1]);
2 L2 k f; `7 G! M break;8 B$ ~( a$ e& G4 y2 s. L7 m
}
' F0 ~ k1 [' z: N }
5 M; f7 p7 O1 V# W) P if(l==0)
6 H: Z! g, d4 W6 { continue;//Inconsistency found after x relations.0 |# I; x4 a$ x, L5 C! I2 `
else{
; L( ~; h5 H- t! Y+ w if(n_m[1]<n_m[0]-1). r1 ~. w% H0 Y; C3 V/ {
{& W5 X* d- y& i0 `7 _
printf("Sorted sequence cannot be determined.\n");
1 y3 {2 V+ W# E" ~( }" { l=0;' q$ w* c2 ~7 y+ b+ ], y/ C1 ^
}8 Z, _' X$ e$ G/ ^2 g
else' b I k" f" G# H' b5 n: M$ h
{' U! N8 N& J1 b$ z! J1 v) b9 V
if(n_m[1]==n_m[0]-1)
, p' C! t4 g5 h% f, t" B: e' r {
, d# u. }9 ^- K$ T: p8 t& ? M0 I7 O int k=0,p=0;
/ ~8 Q u. _% O9 Y: B3 ]5 Z- {) J for( ;k<n_m[1]-1;k++)
9 M) q4 E C- E, \ for(p=k+1;p<n_m[1];p++)
& P% X$ ?3 [/ S" J' ?% b) ] if(re[0]==re[0]||re[2]==re[2])
% O0 o/ s/ K$ }. F" u" d {
/ k j7 j4 m& ] printf("Sorted sequence cannot be determined.\n");
0 P* b8 l- i* V7 s: i. y break;
. Y% R! I6 [1 N9 t9 R2 D l=0;
. z0 Y V% c+ {, z7 A+ x; u, E }
5 k6 i5 c' @! Z }
9 k9 N' p! f7 ~4 t. o }+ i5 D- e( \/ E1 B6 z1 M
if(l==0)
0 E! y7 W5 c7 s: r5 j, s continue;//Sorted sequence cannot be determined.: `; G" u$ E/ q m1 `; N
5 g$ `. f7 J# h8 V9 X
else: t8 \! v2 c4 r( [. V9 k& O
{7 h; D" y4 e8 [8 _8 j J" L
' t# q/ V) l; _
for(int k=0;k<n_m[0];k++)6 }8 T! v: X5 v2 Z6 O& j2 @/ D
temp[k]=k+65;
0 V% y: z& j' r0 u% U/ |/ ~ for(k=0;k<n_m[1];k++,j++)
, P+ C, F; o' A! Z$ I# { {& [2 F9 Q' z) f+ I) w' k, _$ {
int t1=0,t2=0;
6 t3 y8 {7 V. A+ c6 A2 ? for(int s=0;s<n_m[0];s++)
. w$ G2 b3 j4 t0 z$ c {/ x) u! @4 z ?+ Y
if(temp==re[0])
, E I7 W4 ^3 M$ S t1=s; G- \' m6 a j+ Q$ h1 r% \( |9 |
if(temp==re[2])
6 `, q$ q( l/ K9 s# U t2=s;
$ k: M- u, {# t: L8 w& x }8 i# e' y6 P$ U6 O) g
if((t1>t2)&&re[1]=='<'); u4 C5 N$ r& a
{
& A& ~+ o2 x# y char t3=temp[t1];
2 ]& J" R+ d$ H9 M* H temp[t1]=temp[t2];
, @* z( ^0 Q" B8 z" m: ? temp[t2]=t3;
; V1 X& F7 Y# g; `; ~5 O }6 {( Q8 J1 @2 ~* i Y- o
}
0 X0 R& N* ^- y# j7 D7 B3 p int count=0;
3 l" g1 `8 q* P+ W' _ for(int s=0;s<n_m[0]-1;s++)) Y4 |- P( F6 E6 w0 \. b
for(int d=j-n_m[1];d<j;d++)6 w8 i0 m( U+ u1 H
if(re[d][0]==temp&&re[d][2]==temp[s+1])
2 Y- L. G( a I1 \4 [7 n {" N* O! I0 a5 a( E" n- s
count++;
1 O" ?; ~" D0 t# Y) M break;; M) S; D0 H0 w
}3 C2 S. Y4 c3 n/ z2 O
if(count==n_m[0]-1)+ ?2 W: ?% t- j5 {
{; B# Z- I8 r4 p# i2 \! m$ o5 B
printf("Sorted sequence determined after %d relations:",n_m[1]);! l# ^5 Z. v: a. {, g
for(int f=0;f<n_m[0];f++)' H9 Q. S( A- L/ ]. C+ I# _2 Y
printf("%c",temp[f]);1 Y$ ^$ q( b K
printf("\n");
$ n8 a+ ~ H- h, r/ J }; g3 L7 i9 h: E6 `. s
else
- X& ~) Q' y; A, C! h6 N7 I8 C printf("Sorted sequence cannot be determined.\n"); ( V" Z+ N# A' {. S6 j
}0 U# r) x/ q* R9 W$ ?
}( x2 l: k g9 n' C
}- z8 D7 V* f' i2 v9 [. N
}& l. _/ w6 G' w- g
( v3 X) |' T, H( L/ y. f; C- X
* d! \" Q7 S! `/ \4 W& w5 [3 Z r# B( ?7 h1 |. M; `" ~4 b
5 s9 c4 h4 U: k4 b+ ]* J7 s1 i' [/ k4 u+ a' P" V
: y7 G8 b' I R) C ^
' q' D% j: Q- N' H) \7 c/ ]6 P% M
3 |3 N1 p0 H3 j' O3 a来源:编程爱好者acm题库 |