120 - Stacks of Flapjacks

本文详细介绍了煎饼排序算法的实现过程,特别针对测试数据答案错误的情况,提出了一种改进策略。通过从后向前扫描数组,确保最大煎饼位于正确位置,对于位置错误的煎饼进行翻转操作,最终得到正确的排序结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这道题的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;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值