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. Pycharm模板添加默认信息

    我们在Pycharm中使用到python3.x版本的解释器,完全没有问题可以正常使用,但是有的时候多少会出现使用python2的时候 我们明明都把代码和文字注释了,为什么使用的时候还会报错呢?? 报错 ...

  2. windows下编译和安装boost库

    boost是一个功能强大.构造精巧.跨平台.开源并且完全免费的C++程序库. 获取方式 boost提供源码形式的安装包,可以从boost官方网站下载,目前最新版本是1.59.0. 本机上正好有boos ...

  3. iOS 网易彩票-6设置模块三(常用小功能)

    该篇文章中,用到很多iOS开发过程中常用的小功能,当前只是将这些功能集成到网易彩票的设置中.iOS-常用小功能介绍,请参考我的另一篇文章: iOS 常用小功能 总结:http://www.cnblog ...

  4. 学习Css补充知识点

    1.text-transform: capitalize;UpperCase等 2.border-size:box,边框在定义的宽高范围内画,  content默认,在宽高外画.元互的宽高只指内容 3 ...

  5. C# Bulk Operations(转)

    转自http://blog.csdn.net/winnyrain/article/details/51240684 Overcome SqlBulkCopy Limitations with C# B ...

  6. java 事件通告写法

    使用场景: 自己模块发生变化后可能引起其他模块变化的部分,需要添加事件通告,通知其他模块. 使用模式: 观察者模式 (以User类为例)写法: 1.创建接口: public interface IUs ...

  7. 【kafka学习之二】Kafka集群搭建

    安装环境    jdk1.7 zookeeper-3.4.5(参考 https://www.cnblogs.com/cac2020/p/9426531.html) VM虚拟机redhat6.5-x64 ...

  8. 隐马尔可夫模型(HMM)学习笔记一

    学习了李航的<统计学习方法>中隐马尔可夫模型(Hidden Markov Model, HMM),这里把自己对HMM的理解进行总结(大部分是书本原文,O(∩_∩)O哈哈~,主要是想利用py ...

  9. 能让程序做的事情坚决不用人来做——批量修复markdownlint MD034警告

    欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...

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

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