代码第23行本意是r[j]=i,不小心写成了r[i]=j,输出一个序列,找到了规律:从后向前找升序的第一个值,把它及其它之前的全部输出……
比如对于第二个样例得到1,6,3,2,4,5,7,8,9。从后向前第一个升序是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 阅读(537)
评论(0) 编辑 收藏 引用 所属分类:
题目分类:排序