120 - Stacks of Flapjacks

来源:互联网 发布:购买域名需要多少钱 编辑:程序博客网 时间:2024/05/29 04:23

这道题的udebug里有测试数据,但是数据的答案貌似是错的。。真坑啊,还好我坚定的提交了~~

思路紫书上已经说的很清楚了,从后向前扫描数组(从下向上) 从最大的煎饼开始处理,如果第i 大的煎饼不在它应该在的位置,就对这个煎饼进行处理,先翻到最顶上,再翻到它应该在的位置。

#include<bits/stdc++.h>using namespace std;int n,a[100],b[100];string s,buf;int main(){    while(getline(cin,s)){        stringstream ss(s);        int kase = 0,maxn = 0;        while(ss>>buf) {        int  v ; sscanf(&buf[0],"%d",&v);        if(v==0) continue;        a[kase] = b[kase] = v; kase++;        }        sort(b,b+kase);        for(int i=0;i<kase-1;i++) printf("%d ",a[i]);        printf("%d\n",a[kase-1]);        for(int i=kase;i>=1;i--){            if(a[i-1]==b[i-1]) continue;            else {                int ans ;                for(int j=0;j<kase;j++){                    if(a[j]==b[i-1]) {                        ans = j; break;                    }                }                if(ans!=0) {                    printf("%d ",kase-ans);                    for(int k=0;k<(ans+1)/2;k++){                        int t = a[k];                        a[k] = a[ans-k];                        a[ans-k] = t;                    }                }                printf("%d ",kase-i+1);                for(int k=0;k<(i+1)/2;k++){                    int t = a[k];                    a[k] = a[i-k-1];                    a[i-k-1] = t;                }            }        }        printf("0\n");    }    return 0;}



1 0