VJ题目链接

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

思路:正常冒泡排序的想法。如果前两个数,前面的大于后面的,则换(特例是n,1不能换)。否则,就用2的逆操作,把最后的数放前面。

代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; #define n 1023
int a[n+];
int n;
int hd; bool check() {
for (int i = ; i <= n; i++) {
if (a[(hd+i-)%n] != i) return false;
}
return true;
} int stk[]; void show() {
for (int i = ;i < n; i++) {
printf("%d ", a[(hd+i)%n]);
}puts("");
} int main() {
while (scanf("%d", &n) != eof) {
if (n == ) break;
for (int i = ; i < n; i++) {
scanf("%d", &a[i]);
}
hd = ;
int top = ;
while (true) {
if (check()) break;
if (a[hd] > a[(hd+)%n] && (!(a[hd] == n && a[(hd+)%n] == ))) {
stk[top++] = ;
//printf("1");
swap(a[hd], a[(hd+)%n]);
continue;
} else {
a[(hd-+n)%n] = a[(hd+n-)%n];
stk[top++] = ;
//show();
//printf("2");
hd = (hd-+n)%n;
}
}
for (int i = top-; i >= ; i--) printf("%d", stk[i]);
puts("");
}
return ;
}

UVA 11925:Generating Permutations(冒泡排序 Grade D)的更多相关文章

  1. UVA 11925 - Generating Permutations

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

  2. UVa 11925 Generating Permutations (构造法)

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

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

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

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

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

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

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

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

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

  7. UVA-11925 Generating Permutations (逆向思维)

    题目大意:给出1~n的某个排列,问由升序变到这个排列最少需要几次操作.操作1:将头两个数交换:操作2:将头一个数移动最后一个位置. 题目分析:反过来考虑,将这个排列变为升序排列,那么这个变化过程实际上 ...

  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. Android 游标

    静下心来,学一下Android的数据库连接. 1.直接从getReadableDatabase()与getWritableDatabase()入手.    --getReadableDatabase( ...

  2. STM8S PWM输出停止后 IO口电平输出

    STM8S有许多定时器支持PWM输出,但在停止定时器后,IO口电平到底是多少呢?或高或低. 因此,为了确定PWM停止输出电平后其对应的值是多少,我们在停止PWM输出时需要对CCMR1寄存器进行设置. ...

  3. 起始授权机构(SOA)

    起始授权机构 编辑 本词条缺少名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 起始授权机构,SOA(Start Of Authority):该记录表明DNS名称服务器是DNS域中的数据 ...

  4. Python 定义及使用结构体

    Python中没有专门定义结构体的方法,但可以使用class标记定义类来代替结构体,其成员可以在构造函数__init__中定义,具体方法如下. class seqNode: def __init__( ...

  5. static任我行- 为人不注意的static

    前几天一直在想,static方法如果没有被调用,会不会分配内存的问题,查了一下资料,终于得到了一个官方的说法了. static 方法调用:使用比较频繁的时候使用,像数据库连接串,Connection ...

  6. 【The VC Dimension】林轩田机器学习基石

    首先回顾上节课末尾引出来的VC Bound概念,对于机器学习来说,VC dimension理论到底有啥用. 三点: 1. 如果有Break Point证明是一个好的假设集合 2. 如果N足够大,那么E ...

  7. 【转载】Unity3D研究院之IOS触摸屏手势控制镜头旋转与缩放

    前几篇文章介绍了很多Unity3D引擎自身的一些问题, 今天我们在回到IOS设备上讨论一些触摸屏幕手势,本章的目标是通过触摸iPhone屏幕手势 实现模型左右的旋转,与模型的缩放. 大家想一想模型的旋 ...

  8. iptables的配置文件/etc/sysconfig/iptables不存在 linux防火墙开关命令

    某linux服务器,使用 cat /etc/sysconfig/iptables命令时, 找不到文件. 1. service iptables status 使用该命令检查状态 如果之前找不到配置文件 ...

  9. Linux中awk后面的RS, ORS, FS, OFS 含义

    转载自http://blog.csdn.net/qq416647781/article/details/40649419   一.RS 与 ORS 差在哪   我们经常会说,awk是基于行列操作文本的 ...

  10. 像Excel的表格table

    推荐:Spread.js 地址:点击打开链接 Demo:点击打开链接