首页 > 其他 > 详细

uva 120 C - Stacks of Flapjacks

时间:2015-11-24 21:09:44      阅读:298      评论:0      收藏:0      [点我收藏+]

题意:给一个n长度的子序列,每次可以把从下往上数,第几个及上面的都反转过来,最后序列变为上升子序列

分析:可以每次把当前最大的放到下面,这样以后无论如何翻动都不会干扰到他,直到得到答案

题目没有要求最优解,这样肯定能得到结果,借助函数reverse反转数组效果不错,没难度,见代码

技术分享
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=35;
 4 
 5 struct point{
 6    int id,x;
 7 }p[maxn];
 8 
 9 bool cmp(point a,point b){
10    return a.x<b.x;
11 }
12 
13 int num[maxn];
14 
15 int main(){
16    int n,d;
17    string line;
18    while(getline(cin,line)){
19       stringstream ccin(line);
20       n=0;
21       while(ccin>>d){
22          p[n].x=d;
23          p[n].id=n+1;
24          n++;
25       }
26       for(int i=0;i<n-1;i++)
27          cout<<p[i].x<<" ";
28       cout<<p[n-1].x<<endl;
29       sort(p,p+n,cmp);
30       for(int i=0;i<n;i++)
31          num[p[i].id-1]=i+1;
32       int ans=n;
33       while(n>1){
34          int i;
35          for(i=n-1;i>=0;i--)
36             if(num[i]==n)
37                break;
38          if(i==0){
39             reverse(num,num+n);
40             n--;
41             cout<<ans-n<<" ";
42          }
43          else if(i==n-1)
44             n--;
45          else{
46             cout<<ans-i<<" ";
47             reverse(num,num+i+1);
48             reverse(num,num+n);
49             n--;
50             cout<<ans-n<<" ";
51          }
52 
53       }
54       cout<<0<<endl;
55    }
56    return 0;
57 }
View Code

 

uva 120 C - Stacks of Flapjacks

原文:http://www.cnblogs.com/jihe/p/4992780.html

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