您的位置:首页 > 其它

UVa 120 Stacks of Flapjacks【构造法】

2015-03-25 20:56 393 查看
题意:给出n张煎饼,从上到下输入,每张煎饼上面都有一个数字,厨师每次可以选择第k张煎饼,进行翻转操作,设计一种方法使得所有煎饼按照从小到大排序(最上面的煎饼最小)

首先是这个翻转的操作,如下图

#include<cstdio>
#include<iostream>
#include<sstream>
#include<algorithm>
using namespace std;

const int maxn=10005;
int a[maxn];
int n;

void flip(int p){
for(int i=0;i<p-i;i++) swap(a[i],a[p-i]);

printf("%d ",n-p);
}

int main(){
string s;
while(getline(cin,s)){
cout<<s<<"\n";
stringstream ss(s) ;
n=0;
while(ss>>a
) n++;

for(int i=n-1;i>0;i--){
int p=max_element(a,a+i+1)-a;//找到最大的数的下标

if(p==i) continue;//如果这块饼的位置是对的,就不管
if(p>0) flip(p);//如果饼不是在0位置,那么将这块饼 翻到0位置
flip(i);//将这块 饼翻到它应该在的位置
}
printf("0\n");
}
return 0;
}


View Code

自己写的代码不仅不忍直视= =还运行不出结果,最后还是看的lrj的代码 = =

go---go---go
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: