【链接】 我是链接,点我呀:)

【题意】

在这里输入题意

【题解】

让你把排列1..n变换成对应的输入序列。
每次可以交换前两个数字,或者把第一个数字放到末尾去。

可以逆向考虑。

即把无序的序列变换成有序的.

则第二种操作就变为"把末尾的数字放到最前面去"

则可以这样。

如果a[0]>a[1] 且a[0]不为n那么就swap(a[0],a[1])

否则把最后面的那个数字放到开头。

之所以加一个a[0]不为n的判断。是为了模拟那个冒泡排序的过程。

即到了最后一位的话,肯定就不用判断大小关系了

想一想冒泡排序->for (int i = 1;i < n;i++) if (a[i]>a[i+1]) swap(a[i],a[i+1]);

可以看到i也是不会到达n的。

我们这样把最后一个数字放到最前面。感觉就类似这个枚举的过程。

这个n就类似一个墙壁的功能。

把要排序的数字全都挡在它的“左边"

【代码】

#include <bits/stdc++.h>
using namespace std; const int N = 3e2; int n;
vector <int> a;
stack <int> sta; bool ok(){
for (int i = 0;i < n-1;i++) if (a[i]>a[i+1]) return false;
return true;
} int main(){
#ifdef LOCAL_DEFINE
freopen("rush_in.txt", "r", stdin);
#endif
ios::sync_with_stdio(0),cin.tie(0);
while (cin >>n && n){
a.clear();
for (int i = 0,x;i < n;i++) {
cin >> x;
a.push_back(x);
}
while (!ok()){
if (a[0]>a[1] && a[0]!=n){
swap(a[0],a[1]);
sta.push(1);
}else{
sta.push(2);
int temp = a.back();
a.pop_back();
a.insert(a.begin(),temp);
}
}
while (!sta.empty()){
cout<<sta.top();
sta.pop();
}
cout << endl;
} return 0;
}

【习题 8-7 UVA - 11925】Generating Permutations的更多相关文章

  1. UVA 11925 - Generating Permutations

    题意: 给出一个1到n的排列,给出操作顺序,使升序排列能变为所给排列. 分析: 正常冒泡排序的想法.如果前两个数,前面的大于后面的,则换(特例是n,1不能换).否则,就用2的逆操作,把最后的数放前面. ...

  2. UVa 11925 Generating Permutations (构造法)

    题意:给定一个序列,让你从一个升序列变成该序列,并且只有两种操作,操作1:交换前两个元素,操作2:把第一个元素移动到最后. 析:一开始的时候吧,不会,还是看的题解,首先是要逆序来做,这样可能好做一点, ...

  3. UVA - 11925 Generating Permutations (思维,构造)

    给你一个长度为n(n<=300)的排列,有两种操作,第一种是交换前两个数,第二种是把第一个数放到最后,让你用不超过2n^2次的操作把一个初始为1-n升序的排列变为该排列. 一开始被紫薯蛋疼的翻译 ...

  4. UVA 11925:Generating Permutations(冒泡排序 Grade D)

    VJ题目链接 题意:n个数(n<300),是一个1~n的某个排列.有两种操作:操作1把前两个数换位置,操作2把第一个数移动到最后.问给出一个排列,问通过怎样的操作,能把1,2,3,...,n变到 ...

  5. UVA 11925 Generating Permutations 生成排列 (序列)

    题意:要用一个有序的序列生成给定序列,操作有两种,一是交换前两个元素,二是把第一个元素移动到最后去. 思路有两种: 1.映射,把给定序列映射成有序的序列,然后按照同样的替换规则把有序的序列映射掉,然后 ...

  6. UVA - 11925 Generating Permutations(生成排列)(构造)

    题意:将序列1,2,3,……,n,用不超过2n^2次操作,通过下列操作变成给定序列.(1<=n<=300) 1.交换前两个元素 2.将第一个元素移到最后 分析:因为将序列变成升序更容易操作 ...

  7. 紫书 习题8-7 UVa 11925(构造法, 不需逆向)

    这道题的意思紫书上是错误的-- 难怪一开始我非常奇怪为什么第二个样例输出的是2, 按照紫书上的意思应该是22 然后就不管了,先写, 然后就WA了. 然后看了https://blog.csdn.net/ ...

  8. UVA 10098 Generating Fast, Sorted Permutation

    // 给你字符串 按字典序输出所有排列// 要是每个字母都不同 可以直接dfs ^_^// 用前面说的生成排列算法 也可以直接 stl next_permutation #include <io ...

  9. (组合数学3.1.1.2)UVA 10098 Generating Fast(使用字典序思想产生所有序列)

    /* * UVA_10098.cpp * * Created on: 2013年10月8日 * Author: Administrator */ #include <iostream> # ...

随机推荐

  1. Tiles入门及项目实战

    1.Apache Tiles™ Apache Tiles是一个模板布局框架.最初是为了简化Web应用界面开发,如今已不限于JavaEE Web环境. Tiles允许开发人员定义页面片段,它们在运行时会 ...

  2. LVS+keepalived均衡nginx配置

    如果单台LVS发生突发情况,例如宕机.发生不可恢复现象,会导致用户无法访问后端所有的应用程序.避免这种问题可以使用HA故障切换,也就是有一台备用的LVS,主LVS 宕机,LVS VIP自动切换到从,可 ...

  3. perl模块

    查看perl模块安装目录:find `perl -e ‘print “@INC”‘` -name ‘*.pm’ -print 为什么要写或要模块呢?简言之:代码重用,更多见于写一组工具集,有很多地方是 ...

  4. 对比学习:《深度学习之Pytorch》《PyTorch深度学习实战》+代码

    PyTorch是一个基于Python的深度学习平台,该平台简单易用上手快,从计算机视觉.自然语言处理再到强化学习,PyTorch的功能强大,支持PyTorch的工具包有用于自然语言处理的Allen N ...

  5. Linux同步与相互排斥应用(零):基础概念

    [版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet 或 .../gentleliu,文章仅供学习交流,请勿用于商业用途]         当操作系统进入多道批处理系统时 ...

  6. Metasploit - Tips for Evading Anti-Virus

    绕过杀毒软件,有很多钟方法.此处介绍一种,编写python程序调用shellcode,并使用Pyinstaler将python程序编译为exe程序. 准备工作:(Windows XP环境下编译) 将P ...

  7. POJ2485 Highways 【MST】

    Highways Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 22842   Accepted: 10525 Descri ...

  8. base64格式的图片数据如何转成图片

    base64格式的图片数据如何转成图片 一.总结 一句话总结:不仅要去掉前面的格式串,还需要base64_decode()解码才行. // $base_img是获取到前端传递的值 $base_img ...

  9. Array 对象常用的方法总结

    shift:删除原数组的第一项,返回删除元素的值:如果数组为空则返回undefined var arr = [1, 2, 3, 4, 5]; var out = arr.shift(); consol ...

  10. DotNetCore2.1 下Docker使用的学习

    [环节1:CentOS 安装Docker] Step1:通过 uname -r 命令查看你当前的内核版本 uname -r Step2:使用 root 权限登录 Centos.确保 yum 包更新到最 ...