心如止水
Je n'ai pas le temps
posts - 400,comments - 130,trackbacks - 0
代码第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 阅读(520) 评论(0)  编辑 收藏 引用 所属分类: 题目分类:排序

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理