• UVa 120 Stacks of Flapjacks【构造法】


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

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

    如图所示:是把7以上的翻转,再把7以下的翻转

    然后就是怎样找到去翻转哪张饼 以找最大的为例 即现在在煎饼的序列中找到最大的饼的序号,

    判断序号是否与煎饼上的数字对应得上(即判断这个煎饼有没有放对位置)

    如果没有放对位置

    判断它是否已经在0位置(即顶部)

    如果不在,

    则将它翻转到0位置

    如果在,则不用管

    最后,再将它翻下去,到达它应该在的位置

    如图 输入 2 1 5 3 4

    先找到最大的5,把它翻到顶上去,再把它翻下来

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<sstream>
     4 #include<algorithm>
     5 using namespace std;
     6 
     7 const int maxn=10005;
     8 int a[maxn];
     9 int n;
    10 
    11 void flip(int p){
    12     for(int i=0;i<p-i;i++) swap(a[i],a[p-i]);
    13 
    14     printf("%d ",n-p);    
    15 }
    16 
    17 
    18 
    19 int main(){
    20     string s;
    21     while(getline(cin,s)){
    22         cout<<s<<"
    ";
    23         stringstream ss(s) ;
    24         n=0;
    25         while(ss>>a[n]) n++;    
    26                 
    27         for(int i=n-1;i>0;i--){
    28             int p=max_element(a,a+i+1)-a;//找到最大的数的下标 
    29         
    30             if(p==i) continue;//如果这块饼的位置是对的,就不管 
    31             if(p>0) flip(p);//如果饼不是在0位置,那么将这块饼 翻到0位置 
    32             flip(i);//将这块 饼翻到它应该在的位置 
    33         }
    34         printf("0
    ");
    35     }
    36     return 0;
    37 }
    View Code

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

    go---go---go

  • 相关阅读:
    OpenCV之图像归一化(normalize)
    虚拟机网络模式说明
    大端模式和小端模式
    ASCII、Unicode、UTF-8、UTF-8(without BOM)、UTF-16、UTF-32傻傻分不清
    MFC窗口通过OpenCV显示图片
    基于FFmpeg的Dxva2硬解码及Direct3D显示(五)
    PyQt5播放实时视频流或本地视频文件
    PyQt5信号与槽关联的两种方式
    PyCharm离线安装PyQt5_tools(QtDesigner)
    DC: 8
  • 原文地址:https://www.cnblogs.com/wuyuewoniu/p/4366894.html
Copyright © 2020-2023  润新知