题意:将序列1,2,3,……,n,用不超过2n^2次操作,通过下列操作变成给定序列。(1<=n<=300)

1、交换前两个元素

2、将第一个元素移到最后

分析:因为将序列变成升序更容易操作,所以倒着输出解,进行如下操作:

1、交换前两个元素

2、将最后一个元素移到第一个(当a[0] < a[1] || (a[0] == n && a[1] == 1))

  1. #pragma comment(linker, "/STACK:102400000, 102400000")
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<cstdlib>
  5. #include<cctype>
  6. #include<cmath>
  7. #include<iostream>
  8. #include<sstream>
  9. #include<iterator>
  10. #include<algorithm>
  11. #include<string>
  12. #include<vector>
  13. #include<set>
  14. #include<map>
  15. #include<stack>
  16. #include<deque>
  17. #include<queue>
  18. #include<list>
  19. #define Min(a, b) ((a < b) ? a : b)
  20. #define Max(a, b) ((a < b) ? b : a)
  21. typedef long long LL;
  22. typedef unsigned long long ULL;
  23. const int INT_INF = 0x3f3f3f3f;
  24. const int INT_M_INF = 0x7f7f7f7f;
  25. const LL LL_INF = 0x3f3f3f3f3f3f3f3f;
  26. const LL LL_M_INF = 0x7f7f7f7f7f7f7f7f;
  27. const int dr[] = {0, 0, -1, 1, -1, -1, 1, 1};
  28. const int dc[] = {-1, 1, 0, 0, -1, 1, -1, 1};
  29. const int MOD = 1e9 + 7;
  30. const double pi = acos(-1.0);
  31. const double eps = 1e-8;
  32. const int MAXN = 300 + 10;
  33. const int MAXT = 10000 + 10;
  34. using namespace std;
  35. vector<int> a, ans;
  36. int n;
  37. bool judge(){
  38. for(int i = 0; i < n; ++i){
  39. if(a[i] != i + 1) return false;
  40. }
  41. return true;
  42. }
  43. int main(){
  44. while(scanf("%d", &n) == 1){
  45. if(!n) return 0;
  46. a.clear();
  47. ans.clear();
  48. for(int i = 0; i < n; ++i){
  49. int x;
  50. scanf("%d", &x);
  51. a.push_back(x);
  52. }
  53. while(1){
  54. if(judge()) break;
  55. if(a[0] < a[1] || (a[0] == n && a[1] == 1)){
  56. ans.push_back(2);
  57. a.insert(a.begin(), a[n - 1]);
  58. a.erase(a.end() - 1);
  59. }
  60. else{
  61. ans.push_back(1);
  62. swap(a[0], a[1]);
  63. }
  64. }
  65. int len = ans.size();
  66. for(int i = len - 1; i >= 0; --i) printf("%d", ans[i]);
  67. printf("\n");
  68. }
  69. return 0;
  70. }

  

UVA - 11925 Generating Permutations(生成排列)(构造)的更多相关文章

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

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

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

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

  3. UVa 11925 Generating Permutations (构造法)

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

  4. UVA 11925 - Generating Permutations

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

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

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

  6. UVA 10098 Generating Fast, Sorted Permutation

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

  7. dfs 生成排列和组合

    利用深度优先搜索的性质可以方便的生成n的排列和组合,但是生成组合时每个组合里面元素的个数必须事先确定,以前以为生成组合跟排列一样到n时就可以回溯,直到今天做了某题之后才发现那是错的,那样做生成不了所有 ...

  8. NO.5: 了解C++编译器默认为你生成的构造/赋值/析构

    1.编译器可以暗自位class生成default构造,copy构造,copy assigned函数,析构函数; note1:如果没有自定义构造函数,编译器会为你生成合成默认构造函数.如果有定义则不生成 ...

  9. 【习题 8-7 UVA - 11925】Generating Permutations

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 让你把排列1..n变换成对应的输入序列. 每次可以交换前两个数字,或者把第一个数字放到末尾去. 可以逆向考虑. 即把无序的序列变换成 ...

随机推荐

  1. Jquery - ajax url路径问题

    Jquery - ajax url路径问题 2016年04月26日 09:59:27 yuxuac 阅读数 32308    版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...

  2. Hive事务原理和Datax同步事务表问题解决

    一.事务的概述 1.定义 事务就是一组单元化操作,这些操作要么都执行,要么都不执行,是一个不可分割的工作单位. 2.特点 事务(transaction)具有的四个要素:原子性(Atomicity).一 ...

  3. 二十一 JDK注解&注解案例

    什么是注解? 注解和接口,类属于同一个级别 注解可以在变量.方法.类上加载 注解可以有属性也可以没有属性 注解是有作用范围(源码.编译期间,运行期间) 源码期间:例如String类上@Author  ...

  4. 十四 数据库连接池&DBUtils

    关于数据库连接池: 1 数据库的连接对象创建工作,比较消耗性能. 2 一开始在内存中开辟一块空间,往池子里放置多个连接对象,需要连接的时候从连接池里面调用, 使用完毕归还连接,确保连接对象能够循环利用 ...

  5. mac下添加环境变量

    1.环境变量相关文件说明: a. /etc/profile b. /etc/paths c. ~/.bash_profile d. ~/.bash_login e. ~/.profile f. ~/. ...

  6. MyBatis源码部分简单地解析

    . 一.解析xml: > org.apache.ibatis.session.SqlSessionFactoryBuilder.build(java.io.InputStream, java.l ...

  7. vue+element 递归上传图片

    直接上代码. <template>   <div>     <el-upload       action="http://localhost:3000/pic ...

  8. GoJS组织结构图

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. C#动态获取本机可用串口的两种方式

    1. private void GetSerialPort() //获取串口列表 { RegistryKey keyCom = Registry.LocalMachine.OpenSubKey(&qu ...

  10. Python中基于Unpacking与Packing进行分割,组合操作的嵌套元组数据结构的应用

    对于二叉树,图等,Python可采用基于Packing与Unpacking形成的嵌套元组数据结构来模拟,这里Packing指,比如a=b,c则,a就成了一个包含b,c的元组,Unpacking是指,比 ...