首页 > 其他 > 详细

UVa 120 煎饼

时间:2017-01-26 22:13:49      阅读:251      评论:0      收藏:0      [点我收藏+]

 https://vjudge.net/problem/UVA-120

题意:颠倒连续子序列,使之成为升序。

思路:按照从大到小的顺序,依次选择出一个数字进行分析:

        ①如果该数字已经在正确的位置上,则不用管。

        ②如果该数字已经在最顶端,则从它该在的位置一直到顶端颠倒。

        ③如果该数字不在最顶端,则应先把它搞到最顶端,再从它该在的位置一直到顶端颠倒。

 1 #include<iostream>  
 2 #include<algorithm>
 3 #include<string>
 4 #include<cstring>
 5 #include<sstream>
 6 using namespace std;
 7 
 8 const int maxn = 35;
 9 int ans[maxn];
10 int coo[maxn];
11 int coo2[maxn];
12 int path[1000];
13 int k;
14 int num;
15 
16 string line;
17 
18 bool cmp(int a, int b)
19 {
20     return a > b;
21 }
22 
23 void convert(int t)   //颠倒连续子序列
24 {
25     memcpy(coo2, ans, sizeof(ans));
26     for (int i = 1; i <= t; i++)
27     {
28         ans[i] = coo2[t - i + 1];  
29     }
30 }
31 
32 void solve()
33 {
34     memcpy(coo, ans, sizeof(ans));
35     num = 0;
36     sort(coo + 1, coo + k + 1, cmp);
37     for (int i = 1; i <= k; i++)
38     {
39         int s = coo[i];
40         if (ans[k-i+1] == s) continue;  //如果已经在正确的位置上
41         for (int j = 1; j <= k; j++)
42         {
43             if (ans[j] == s)
44             {
45                 if (j != 1)  //如果未在顶端,先将它颠倒至顶端
46                 {
47                     convert(j);   
48                     path[num++] = k - j + 1; 
49                 }
50                 break;
51             }
52         }
53         convert(k - i + 1);  //颠倒至正确位置
54         path[num++] = i ;
55     }
56     path[num++] = 0;
57 }
58 
59 int main()
60 {
61     //freopen("D:\\txt.txt", "r", stdin);
62     while (getline(cin,line    ))
63     {
64         k = 0;
65         int x;
66         stringstream ss(line);
67         while (ss >> x)  ans[++k] = x;
68         for (int i = 1; i <  k; i++)
69             cout << ans[i] << " ";
70         cout << ans[k] << endl;
71         solve();
72         for (int i = 0; i < num - 1; i++)
73             cout << path[i] << " ";
74         cout << path[num - 1] << endl;
75     }
76     return 0;
77 }

 

UVa 120 煎饼

原文:http://www.cnblogs.com/zyb993963526/p/6352108.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!