本帖最后由 厚积薄发 于 2010-5-6 18:40 编辑
% i1 \: J* u. `1 e6 V! N8 S7 x$ u6 F8 _: W2 H$ g u9 T0 ^
Sorting It All OutDescription
2 m4 l& r! w* @& O; m
# a u- K6 m; F5 [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.
. P" Z; r: z/ ^$ v. \. uInput! L5 M( b& ]1 \+ Z e
& f" B( m! a1 W* X* U" F: |1 J: CInput 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.
3 I) W7 f7 _, {( u2 q2 ` s3 WOutput
# t2 D; g2 A3 I6 n d& t6 g! f" U: ]/ q/ ~) a0 W$ ]- B
For each problem instance, output consists of one line. This line should be one of the following three:
9 X9 t: P- @2 `# F. }( U
' w1 z) @3 ~9 U) I: K9 v$ Z% N$ uSorted sequence determined after ** relations: yyy...y. / ]: G7 c% d o0 M8 U5 ]4 d
Sorted sequence cannot be determined.
5 k5 d( e7 ^) P/ _Inconsistency found after ** relations.
4 Z* {1 o _7 n/ j. R
4 U; ~4 i% g; Y- a0 d/ e% A5 S, Q2 S1 pwhere ** 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.
* O2 M$ e6 T, C& z6 u
4 z+ e, l+ a0 @% W: \输入样例
7 t4 i: M; S9 L2 c- a4 6
$ S4 Z! F' q" TA<B: D z# i' }* l3 d7 ~
A<C
# ^/ J }" E# p# ~1 ?7 L8 A W3 c2 tB<C
7 F; z/ x; m! J* [" y6 }5 iC<D! i* C* I' u% s+ S/ Y: r
B<D4 ?* |' |! n4 U4 r( G
A<B
" {4 c, e+ k* j! l7 V/ K3 2
2 E+ H) C& K: u. y4 V& w: ^A<B
! R+ j; G9 f5 y, i5 @, Q: yB<A( O2 H) v. `# l
26 1
2 d, N- \1 @$ aA<Z
1 f& B: d+ f1 B5 l* p( O% Y0 02 E! v0 j' p0 Y) g* Q4 z Z/ y8 [+ j
3 m% C Y7 k' d5 \输出样例 ; P6 v3 t! D9 D1 g! a. l- s: o/ M
Sorted sequence determined after 4 relations: ABCD.
9 |7 v5 C/ o) L9 W! oInconsistency found after 2 relations., f4 r- y& p) m8 Z
Sorted sequence cannot be determined. 3 x! O5 \ {) w# z" e% F& B
Source0 N; O9 m3 j! O2 M
4 s& a& C+ K8 Z; L! K: ?& l* YEast Central North America 2001 - e5 O Y% e" I5 n
程序解题1: - q: E/ Z3 g8 O( c
//By Jackie Cheung
, a0 z; j9 y6 P# o0 h#include <iostream>
: P8 O( d9 L5 _#include <string>5 l+ V' M) Q7 h# U3 x
#include <cassert>8 V3 V8 R9 Q& f& |1 ~
typedef struct tagNODE ; [0 [. [4 K: J, ^0 {
{8 T- u; @% p" b4 A2 z
char val;
, ~# l* H! m. l. a* b% X+ Z struct tagNODE* link;
/ I& b; m" s7 |1 \8 K}NODE;) i1 L( \; {2 h
using namespace std;
9 k6 ?% k7 ~" C9 ?( M+ I9 f6 uvoid Marshall(bool** arrary,int n)
/ g, n6 X) `2 S1 H1 J{' `9 j, M3 p* O* s# j
for(int i=0;i<n;i++)9 Z% P q+ @2 }
{ i( H- l' J e4 }, x5 |
for (int j=0;j<n;j++)
. a$ ]' C$ L. T5 \. O( a {; |( [1 p* E G! R
if(true==arrary[j])
1 q* o( B6 w) d" K, C# D# B. c for (int k=0;k<n;k++)3 f8 e/ |2 t+ h$ F5 a! R
{# P4 h& ~9 g5 E: [5 u
arrary[j][k]=arrary[j][k] || arrary[k];
* n' v1 [+ k+ \$ X5 C }2 H! v( S+ i8 s* n, s3 l
}7 r) c( h c! W( J+ I0 v
}$ \+ ]) Y$ @4 H( M v7 b
};
% m+ r" q! ?. h9 a) qbool SearchForRoute(bool** array,char Seq[],int nLeft,int nIndex,const int n)
/ K n( J+ W6 G$ w( ~{
9 i6 t5 e/ ]/ V2 s% `& ]& d n& X Seq[n-nLeft]=static_cast<char>('a'+nIndex);0 h7 b. q/ s% J2 ^4 A# ^0 t& D" o% H
bool bFlag=false;
. f- U7 e" z% y& g& G, Y+ w if(1==nLeft)
- h, T- G+ S$ O- D+ L4 s: M/ K/ r {! H* l J# V) O5 N
Seq[n]='\0';
% \! o- L" c) h4 e( {* r# n return true; T0 v/ Y8 B: a3 t
}
5 Q& N9 t9 E' [* o; p! P for (int i=0;i<n;i++)
: B3 z+ r8 C1 z {. f9 v% G. v$ X% k* i( g
if(true==array[nIndex])) z# E6 B7 s5 C, t5 M: C M
{, x9 A. y: u* |# n+ W6 a- f
/ O0 \& R5 S4 e/ G/ ~+ H& D0 m
bFlag=SearchForRoute(array,Seq,nLeft-1,i,n);
( t$ N5 j% `, ]7 T2 U5 Q }* O, ]4 v5 g" H
if(true==bFlag)- Y$ q% {, O D+ |, W$ |
return true;
* C. |' O, E" _: b9 @ }5 t. |: a* W% Z; @
return false;
( v9 [8 e" f/ O, e2 |, w};& W9 E ]$ O+ J
int main()
4 ^. X8 \3 ^3 V9 O% s/ E/ A7 r{/ }" Y/ a- ]( H5 L7 k i
int nSeqLen;' F; B: U8 v- f( R( u
int nRelNum;+ x' D, @6 }& _ B
cout<<"Input the length of the sequence:"<<endl;9 R/ D, i/ {4 g6 U
cin>>nSeqLen;
: @4 \1 X- n2 U8 O6 x, a8 Y- Y cout<<"Input the number of relations between the elements:"<<endl;
B) q# i% P9 X+ h cin>>nRelNum;2 R- C7 p& H0 ^( w
//1:if nRelNum<nSeqLen-1,then the relation can not be determined!
' }" N) s( }* i9 S) i. n7 _( | if(nRelNum<nSeqLen-1)
1 n1 |/ |2 G9 {, p {
2 b' ~7 N2 W+ b5 b% Q' S cout<<"The relation can not be determined!"<<endl;! y! M$ l; D. o6 Z2 K
return 0;0 b% l4 Q* Q6 H
}( R3 q, P$ z( |9 A6 V2 E! |
string* strRelations=new string[nRelNum];
, |5 N" U' k0 V8 x% r0 B char* Seq=new char[nSeqLen+1];2 D: L6 R y- }' A
bool** array=new bool*[nSeqLen]; @' x- T# A3 a: {. H8 M, H
/ b* ^8 f% c# @" f- c/ T+ ]
for(int i=0;i<nRelNum;i++)
% F$ I; a0 B; _2 V- [5 w {
% M7 S# u( s6 I q8 M6 B cout<<"Input the "<<i+1<<"th relation:"<<endl;
! }" L" ]5 l. {: _ cin>>strRelations;2 s1 H8 p0 @' O8 d/ p% d
}2 `3 p- M; E7 O1 q9 A% _
8 o' R3 I3 U: e) E" O$ [1 ~; Z for (int i=0;i<nSeqLen;i++)! ?( B" d% w$ b" T' I* k) j% [
{
) ] m1 g9 O6 q) I1 k array=new bool[nSeqLen];
l+ e# {9 w/ g for (int j=0;j<nSeqLen;j++)& f& U+ e4 S0 E' c: \- c R- ^: n1 z
array[j]=false;
) _' Y: x) L5 \9 y) M }6 a" r4 ~/ G2 X Q- c8 ]" L- w9 `$ R
//The main loop/ N! e9 c4 P, A& H
for (int i=0;i<nRelNum;i++)
; D& \& X0 \1 l {) j! Z* ]$ T* A
char a=strRelations[0];
+ K- [& O& z) x5 X: p) l& ^ char b=strRelations[2];
' ~" d4 O$ f& I' M assert(a>='a' && a<'a'+nSeqLen && b>='a' && b<'a'+nSeqLen);
' a: S8 K0 i% V+ ]- f+ t4 S array[a-'a'][b-'a']=true;
( }3 g. O7 R* b( f' t m, `6 Q6 R" o! G7 e& v
Marshall(array,nSeqLen);
3 ^) T/ d, C9 Y" [
$ H h6 }" K+ D! M //Check for Inconsistency after every relation
7 Q5 S# @7 \8 Y f5 | q' G9 W for (int m=0;m<nSeqLen;m++)
% s% ?0 v5 O$ I2 s& X' E7 K {
" U1 L5 d# p& b) Z2 Q+ I if(true==array[m][m])
* ~, u4 V1 B n/ C& { {: Z6 K& O8 r# m- w
cout<<"Inconsistency found after"<<i+1<<"th relation!"<<endl;. L& A: D" ^/ _2 A9 `
delete []strRelations;5 X/ n( _8 |0 b0 X* M% o
for(int k=0;k<nSeqLen;k++): S: M8 u& D }' _
delete []array[k];
; }! s0 A& ?4 f0 L# N/ _8 o3 Q0 ]6 W# L delete []array;/ F9 @' Q* J! ]& q0 e& Z
delete []Seq;
9 ^8 s/ f( i7 M/ @& D return 0;: h) A+ _' [. B4 |0 i
+ C) S2 k- m, Y
}7 u. _* e) y9 C& W* N
}
, G! f# `$ @2 Y- ^) I8 ]
; j3 V, g1 p* d# I' H //Check for the determined sequence after every relation 7 A, x' ~% |) N+ L% j! V
for (int j=0;j<nSeqLen;j++)
7 V/ M; I) h* [6 i {1 @2 u8 m2 s- S$ A* t6 n. D
if(true==SearchForRoute(array,Seq,nSeqLen,j,nSeqLen))6 w2 p9 X. w9 h* ?! K' ^
{
# L/ w% b" }6 W$ U5 h cout<<"Sorted sequence determined after the"<<i+1<< "th relations:"<<Seq<<endl;
; O1 M1 t& w9 w( n delete []strRelations;% L/ q, ]2 H: ~0 A! T j6 z
for(int m=0;m<nSeqLen;m++)
, _0 F: \4 z" a* {% ^6 G- ]1 P delete []array[m];
) j* U! Z+ m) }- B8 v delete []array;
. u. {: A! t R( b8 x1 m8 Y delete []Seq;
: @ N/ t* U6 G D ~ return 0;
3 s) R5 w+ F$ f; o }
! |4 i: R7 C3 o: w8 P& n0 z }
$ K, X; o0 Y1 ~/ r0 m/ I( {& ?/ H4 ~) a. g8 b; h( s+ L/ _
$ ~; {, h8 K* `3 r% a0 F+ o }
* X- `$ V! U5 h/ }1 v- W //If the program has come to here ,then the relationship hasn't been determined!!!$ q2 S9 q; `: x
cout<<"The relation can not be determined!"<<endl;
% d1 r1 _+ d& d, f2 [ delete []strRelations;
9 X- j7 z5 Q0 x( n i" j3 P for(int m=0;m<nSeqLen;m++)
$ @) _1 R: m6 G) X- l/ B delete []array[m];6 _$ e# A# {% S4 P( O
delete []array;
" ?; o% M/ R6 x4 \* { delete []Seq;
5 w x& f ^7 s9 c; E% G- p d7 l: g* k( [" T
return 0;
' q# l. D0 k& U: i2 N. {}& H8 K$ M6 J9 X5 K! I" t) t5 p
' B; O! E* @7 |4 ~6 M程序解题二:#include"stdio.h"
. M2 o* ^, |2 \! e1 Y' J) ^void main()) x9 B2 X; J+ h1 a) ?. o3 ]' k
{
" [) `7 J) C. B6 U& g8 ]. ^$ e int n_m[100][2];" i: K$ n- p ~6 b2 W6 K0 `
char re[1000][3],
, s8 | @( T. r2 l1 k. w7 ^ temp[26];
+ M) C2 }( C8 [) V$ X int i=0,j=0;
8 `, B# R& l4 E- Z3 M scanf("%d%d",&n_m[0],&n_m[1]);7 C, r8 H9 e6 M3 u: q
for( ;j<n_m[1];j++)
8 m3 R5 J4 P- j6 o8 a0 v! u scanf("%s",&re[j]);& E4 E3 J9 C1 p% h+ \
while(n_m[0]!=0&&n_m[1]!=0)/ Z- `% M0 O. C0 ?
{0 e, V5 B. H! C% U( H' h
i++;
' \, ]! l0 J5 d; \& }( e scanf("%d%d",&n_m[0],&n_m[1]);
- c. o4 _& t( n1 F4 r" J% N7 ^ for( int f=0;f<n_m[1];f++,j++)- @ d0 }- S' U# t% v; T; W) v
scanf("%s",&re[j]);; Y7 {" m( \' Y
}
) ?1 ~+ F4 N6 w# Y; z% a i=0;
n9 V; B v9 k9 L2 K/ ^; X2 _; L j=0;' l+ X! o# x: u$ ^
for( ;n_m[0]!=0&&n_m[1]!=0;i++)
3 d& C9 G5 d$ v$ B: V4 R0 f5 Z% s {
! X4 W3 _. P, C! w+ b int a=0,b=0,l=1;7 h, U, M+ J" r S- _& u& T
for(a=j;a<j+n_m[1]-1;a++)
1 q; a& g& [) e/ W3 R X! R for(b=a+1;b<j+n_m[1];b++)
( \4 j0 Z2 y6 i; D s9 l {
& K7 Q6 J" ?, R* H9 z8 _* u5 G4 R 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])+ G$ F2 b. @4 h$ r7 Q U3 q
{
1 m4 G+ |3 ?* X+ }( O( D* i3 O1 S l=0;
6 a# O/ w. w2 z5 v! R1 p9 \' b printf("Inconsistency found after %d relations.\n",n_m[1]);
, S5 U1 p5 ]# Q4 j4 x" J break;
5 g$ H/ G4 T/ P4 D' X( f }
" l, e5 [1 P9 \# f4 g }
# \# P0 t0 Q: a( Z* O$ | if(l==0) 6 C' K9 y$ R' G4 a: [
continue;//Inconsistency found after x relations.7 N# j% n8 a' u8 o
else{
$ z: P" O; l% p; {. z; J w* T if(n_m[1]<n_m[0]-1)
% B* D! n3 s j8 ] {, r F! R" T9 `/ P. u
printf("Sorted sequence cannot be determined.\n");" `' \" M# i8 p, j2 Q$ Q( h5 l
l=0;
9 v/ K( |% \3 g) p }5 U# v/ Y7 D2 {
else
, P8 g2 q( b$ N7 o" \+ M {; s3 [9 r5 T; T! L' s
if(n_m[1]==n_m[0]-1)7 e" L0 ~' t: M* R
{ 0 U9 D2 }! ^# b+ Y- z6 g
int k=0,p=0;4 `( X! K y" e: F- i
for( ;k<n_m[1]-1;k++)- H# ~' H; N6 G8 ]6 B, s% X* w
for(p=k+1;p<n_m[1];p++)- h2 |- ~+ f7 Q. K- d% B7 s7 f
if(re[0]==re[0]||re[2]==re[2])( k6 X+ y; h K& u8 T B& w
{
9 U) {5 X) [' `& {- C/ Q' Y printf("Sorted sequence cannot be determined.\n");
. w3 @, E/ h! |) [; ^ i break;# |( m3 v+ n$ D% v/ p T
l=0;
( `" a' w$ w/ P8 r, M1 T! a }
# N6 \( ?* S2 D/ M }
9 D- S# O* u% T }
o) S6 q% x7 U1 b8 \ if(l==0) : u' L1 ~: D' A3 ^
continue;//Sorted sequence cannot be determined.
, i# `) X( _, Z9 L$ r8 Y+ o; l/ i5 f* }* A1 g" Z- r8 s) A/ ?2 ~+ Y
else
1 F+ r# Z0 N. I& a, Y! G7 X {
9 z7 V/ v! z% s' ?4 q3 l9 Q; z
2 K: |1 \ W- Z! b* F0 M for(int k=0;k<n_m[0];k++)
* Q$ |$ ^( ?2 w/ _) k' c temp[k]=k+65;
5 M4 N; I: w4 b H; t1 F% f for(k=0;k<n_m[1];k++,j++)
) F. z) s! f8 E# N, k ]1 _ {
5 Y" V7 X. @7 u5 p, A3 ~ int t1=0,t2=0;
' b4 d( I+ L5 k; G0 @ for(int s=0;s<n_m[0];s++)" n; q' e6 v% A" b7 R6 {6 T- j
{. \' J* k0 B4 e
if(temp==re[0])
8 v+ q/ u( y0 d+ f' h1 c t1=s;* ^# f; g# C- S; c8 V
if(temp==re[2])1 [4 j" ~) }, t3 T2 F: B. c
t2=s;
! F% M/ X+ K1 Y4 j, f3 q# E) W( d; p }
& V# ]/ z( O$ d# A if((t1>t2)&&re[1]=='<')
% m9 ]& v4 ^) U. S& h {: N3 }1 Y2 ?8 C3 |
char t3=temp[t1];
+ I/ {2 M* q6 n! Z4 S2 H8 I; ?) |7 Z temp[t1]=temp[t2];
$ O' B, K! W/ g2 o3 V1 | temp[t2]=t3;
1 l- e- K9 P- R) y! V# T x3 c. s5 d }
: o7 j: I3 F. f I3 j; Y: ^# Q }
% z% V& L- h* p: o4 o5 \& ~% A- D int count=0;
1 a+ Y' \/ I4 N% P for(int s=0;s<n_m[0]-1;s++)
/ F$ ?4 }4 X# Y1 H! f* n& U. D" F3 ` for(int d=j-n_m[1];d<j;d++)$ c! b9 K) ]/ L" U0 n2 W# v
if(re[d][0]==temp&&re[d][2]==temp[s+1]). W p7 R' b7 H5 q6 i
{
5 I- R7 ?( f& @" f count++;) U) l0 k! c9 M
break;
2 }" C) c$ o) { }
. P: u2 I9 @1 ` I% L; `/ q if(count==n_m[0]-1): W. M1 [5 q# s
{+ A# S/ H' J( g
printf("Sorted sequence determined after %d relations:",n_m[1]);
( y$ G$ ~& Q9 I& L% D ? for(int f=0;f<n_m[0];f++)
6 a* T. }) J1 V2 P7 E8 M printf("%c",temp[f]);
+ c) q1 T* v5 r- F: v printf("\n");
& b: T4 w4 t M* D& u0 v6 L+ t }
( A5 B# A% m8 z# ^& { Y% w else' ^+ g/ ^9 C# G( j, } }9 [- Z# n$ G0 i; U
printf("Sorted sequence cannot be determined.\n"); 4 o# c9 B6 G% m; e- _( E
}
k' x4 J5 {' I6 h0 k2 N* a/ d }
* y; {& L1 s7 Y, O* r }) q+ w* ~, T$ J( ]2 P2 E
}- O' t" B, z' w2 s2 \) D4 I$ Y1 R
! t/ i) t: b/ e( e1 o9 {: y
6 o& a" k; B% l4 X6 Y5 X
$ S2 D/ z9 r! Q0 Q
8 \$ u# B3 x! w
0 j A, \/ [+ v2 q* G
, J6 c. H) L/ U8 P3 k
6 u2 T, {# h5 `) ?% S2 f: f
+ @* n/ ]& Q* F1 ~; A9 z来源:编程爱好者acm题库 |