https://vjudge.net/problem/UVA-120

题意:颠倒连续子序列,使之成为升序。

思路:按照从大到小的顺序,依次选择出一个数字进行分析:

①如果该数字已经在正确的位置上,则不用管。

②如果该数字已经在最顶端,则从它该在的位置一直到顶端颠倒。

③如果该数字不在最顶端,则应先把它搞到最顶端,再从它该在的位置一直到顶端颠倒。

 #include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<sstream>
using namespace std; const int maxn = ;
int ans[maxn];
int coo[maxn];
int coo2[maxn];
int path[];
int k;
int num; string line; bool cmp(int a, int b)
{
return a > b;
} void convert(int t) //颠倒连续子序列
{
memcpy(coo2, ans, sizeof(ans));
for (int i = ; i <= t; i++)
{
ans[i] = coo2[t - i + ];
}
} void solve()
{
memcpy(coo, ans, sizeof(ans));
num = ;
sort(coo + , coo + k + , cmp);
for (int i = ; i <= k; i++)
{
int s = coo[i];
if (ans[k-i+] == s) continue; //如果已经在正确的位置上
for (int j = ; j <= k; j++)
{
if (ans[j] == s)
{
if (j != ) //如果未在顶端,先将它颠倒至顶端
{
convert(j);
path[num++] = k - j + ;
}
break;
}
}
convert(k - i + ); //颠倒至正确位置
path[num++] = i ;
}
path[num++] = ;
} int main()
{
//freopen("D:\\txt.txt", "r", stdin);
while (getline(cin,line ))
{
k = ;
int x;
stringstream ss(line);
while (ss >> x) ans[++k] = x;
for (int i = ; i < k; i++)
cout << ans[i] << " ";
cout << ans[k] << endl;
solve();
for (int i = ; i < num - ; i++)
cout << path[i] << " ";
cout << path[num - ] << endl;
}
return ;
}

UVa 120 煎饼的更多相关文章

  1. Uva 120 - Stacks of Flapjacks(构造法)

    UVA - 120  Stacks of Flapjacks Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld &a ...

  2. (白书训练计划)UVa 120 Stacks of Flapjacks(构造法)

    题目地址:UVa 120 水题. 从最大的開始移,每次都把大的先翻到最上面,再翻到以下. 代码例如以下: #include <iostream> #include <cstdio&g ...

  3. UVA - 120 Stacks of Flapjacks(煎饼)

    题意:一叠煎饼,每个煎饼都有一个数字,每次可以选择一个数k,把从锅底开始数第k张以及其上面的煎饼全部翻过来,最终使煎饼有序排列(锅顶最小,锅底最大). 分析:依次从锅底向上,优先排数字最大的煎饼.每次 ...

  4. UVa 120 Stacks of Flapjacks【构造法】

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

  5. 【uva 120】Stacks of Flapjacks(算法效率--构造法+选择排序思想)

    题意:有N张正在锅里的一叠煎饼,每张都有一个数字,代表其大小.厨师每次可以选择一个数k,把从锅底开始数第k张上面的煎饼全部翻过来,即原来在上面的煎饼现在到了下面.要求设计一种方法使得所有煎饼按照从小到 ...

  6. uva 120 stacks of flapjacks ——yhx

     Stacks of Flapjacks  Background Stacks and Queues are often considered the bread and butter of data ...

  7. UVa 120 (构造) Stacks of Flapjacks

    这题求解的过程和选择排序非常相似. 反转的过程中分为无序(在前面)和有序(在后面)两个部分,一开始视为全部为无序. 在无序部分中找到最大的元素,先把它翻到最前面,然后再反转到无序部分的最后面.这样该元 ...

  8. UVA 120 Stacks of Flapjacks

    每次从最底部开始处理,如果不是最大值,则把最大值翻到底部.这就是最优解.原理自己模拟一下就好... 注意半径不是从1开始.数据处理要仔细. #include <iostream> #inc ...

  9. 紫书 例题8-1 UVa 120(构造法)

    #include<cstdio> #include<iostream> #include<sstream> #include<algorithm> #d ...

随机推荐

  1. css 常用的属性

    box-shadow: 10px 10px 5px #000000;  //给元素添加阴影 使用伪元素after要注意加上content属性 例如:.log:after{ content:" ...

  2. c#图像灰度化、灰度反转、二值化

    图像灰度化:将彩色图像转化成为灰度图像的过程成为图像的灰度化处理.彩色图像中的每个像素的颜色有R.G.B三个分量决定,而每个分量有255中值可取,这样一个像素点可以有1600多万(255*255*25 ...

  3. RMAN中%d %t %s %u,%p,%c 等代替变量的意义

    backup incremental level 0 database format='LEV0_%d_%t_%U_%s_%p' format=string 文件路径和名称的格式串,其中可包含宏变量: ...

  4. H2O.ai初步使用

    1.官网下载最新稳定版,https://www.h2o.ai/download/ ,如果点击下载无反应,请使用ie浏览器 2.解压h2o-3.18.0.10.zip到目录h2o-3.18.0.10 3 ...

  5. 公司里面用的iTextSharp(教程)---简介

    一.需求: 公司这次要做一个生成PDF的功能,需要设计,刚刚进入公司,组长把任务分配给了我,为了完成这个任务,苦学了许久的iTextSharp.现在记录下实现过程中了了解的一些东东,一起分享哈~~ 二 ...

  6. Linux基础命令---fsck

    fsck 检查或者修复指定的文件系统,可以是设备名.挂载点,还可以是一个ext2的label,或者是一个UUID.此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.ope ...

  7. Linux基础命令---yes

    yes 反复的输出指定的字符串,直到手动停止.此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora.   1.语法      yes [STR ...

  8. 用crontab执行shell把top命令按日期追加到文件

    用crontab执行shell把top命令按日期追加到文件 详细图文解说请到本人原创百度经验http://jingyan.baidu.com/article/3052f5a1daf11197f21f8 ...

  9. shell脚本简单实例

    1.模拟linnux登录shell #/bin/bashecho -n "login:" read nameecho -n "password:"read pa ...

  10. Tomcat8.5 升级tomcat版本导致出现异常,Base64不存在

    Tomcat8.5 升级tomcat版本导致出现异常,Base64不存在 原因分析: 由于tomcat由7升级到8.5导致Base64的引用路径错误,默认引用为8.5中的jar, 解决方案: 修改引用 ...