Stacks of Flapjacks UVA - 120

 

调了好久,orz

题解:以从大到小的顺序,先把大的翻到最上面,然后再翻回它应该在的位置(即从小到大的排序中的位置),不懂的话拿笔模拟这个过程就明白了。

注意读入的方法!!!坑了好久

 1 #include<queue>
 2 #include<cstdio>
 3 #include<string>
 4 #include<cstring>
 5 #include<sstream>
 6 #include<iostream>
 7 #include<algorithm>
 8 using namespace std;
 9 
10 const int maxn=1005;
11 
12 int d[maxn],b[maxn];
13 
14 int main()
15 {   string s;
16     while(getline(cin,s)){
17         priority_queue<int,vector<int>,less<int> > qmax;
18         stringstream ss(s);
19         cout<<s<<endl;
20         int cnt=0;
21         while(ss>>d[cnt]) cnt++;
22         for(int i=0;i<cnt;i++){
23             b[i]=d[i];
24             qmax.push(d[i]);
25         }
26         sort(b,b+cnt);
27         
28         int i,j;
29         while(qmax.size()){
30             int tem=qmax.top();
31             qmax.pop();
32             
33             for(i=0;i<cnt;i++) if(d[i]==tem) break;
34             for(j=0;j<cnt;j++) if(b[j]==tem) break;
35             if(i==j) continue;
36             if(i!=0){
37                 cout<<cnt-i<<" ";
38                 for(int k=0;k<=i/2;k++) swap(d[k],d[i-k]);
39             } 
40             cout<<cnt-j<<" ";
41             for(int k=0;k<=j/2;k++) swap(d[k],d[j-k]);
42         }
43         cout<<"0"<<endl;
44     }
45 } 

 

posted @ 2017-08-01 09:41  天之道,利而不害  阅读(208)  评论(0编辑  收藏  举报