代碼第23行本意是r[j]=i,不小心寫成了r[i]=j,輸出一個(gè)序列,找到了規(guī)律:從后向前找升序的第一個(gè)值,把它及其它之前的全部輸出……
比如對于第二個(gè)樣例得到1,6,3,2,4,5,7,8,9。從后向前第一個(gè)升序是3,所以輸出3,6,1。
以下是我的代碼(囧):
1 #include <iostream>
2 #include <string>
3 #include <cstdio>
4 using namespace std;
5
6 const int kMaxn = 1007;
7
8 int n, r[kMaxn];
9 string init[kMaxn], aim[kMaxn];
10
11 void Input ()
12 {
13 scanf ( "%d", &n );
14 getchar();
15 for ( int i = 1; i <= n; i++ )
16 getline ( cin, init[i] );
17 for ( int i = 1; i <= n; i++ )
18 {
19 getline ( cin, aim[i] );
20 for ( int j = 1; j <= n; j++ )
21 if ( aim[i] == init[j] )
22 {
23 r[i] = j;
24 break;
25 }
26 }
27 for ( int i = 1; i <= n; i++ )
28 printf ( "%d ", r[i] );
29 puts ( "" );
30 }
31
32 void Solve ()
33 {
34 int pos = -1;
35 for ( int i = n; i >= 2; i-- )
36 if ( r[i-1] > r[i] )
37 {
38 pos = i-1;
39 break;
40 }
41 if ( pos != -1)
42 {
43 for ( int i = pos; i >= 1; i-- )
44 printf ( "%s\n", aim[i].c_str() );
45 }
46 }
47
48 int main ()
49 {
50 #ifndef ONLINE_JUDGE
51 freopen ( "data.in", "r", stdin );
52 #endif
53
54 int T;
55 scanf ( "%d", &T );
56 while ( T-- )
57 {
58 Input ();
59
60 Solve ();
61
62 printf ( "\n" );
63 }
64
65 return 0;
66 }
67
posted on 2011-09-06 20:27
lee1r 閱讀(561)
評論(0) 編輯 收藏 引用 所屬分類:
題目分類:排序