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

一开始被紫薯蛋疼的翻译给坑了,以为是把输入的排列变成升序,假如是这样的话,我们可以发现,每轮操作可以把任意一个数放到数组的最前面,而其他的数的位置不变,且每轮至多需要2*n次操作,于是写出了这样的代码:

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=+;
int a[N],n; int main() {
while(scanf("%d",&n)&&n) {
for(int i=; i<=n; ++i)scanf("%d",&a[i]);
for(int i=n; i>=; --i) {
int j=find(a+,a++n,i)-a;
for(int k=; k<j; ++k)printf("");
for(int k=j+; k<=n; ++k)printf("");
for(int i=j-; i>=; --i)swap(a[i],a[i+]);
}
puts("");
}
return ;
}

结果当然是喜闻乐见的WA掉了,后来仔细读了读原题才发现是让你把原序列变成输入的序列,巨无语...于是做了个简单的逆变换,然后就AC了:

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=+;
int a[N],b[N],n; int main() {
while(scanf("%d",&n)&&n) {
for(int i=; i<=n; ++i)scanf("%d",&b[i]);
for(int i=; i<=n; ++i)a[b[i]]=i;
for(int i=n; i>=; --i) {
int j=find(a+,a++n,i)-a;
for(int k=; k<j; ++k)printf("");
for(int k=j+; k<=n; ++k)printf("");
for(int i=j-; i>=; --i)swap(a[i],a[i+]);
}
puts("");
}
return ;
}

UVA - 11925 Generating Permutations (思维,构造)的更多相关文章

  1. UVa 11925 Generating Permutations (构造法)

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

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

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

  3. UVA 11925 - Generating Permutations

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

  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.11636 Hello World! (思维题)

    UVA.11636 Hello World! (思维题) 题意分析 这题挺水的,还是错了几发. QWQ. 有一个同学打了一行hello world,现在他想打n行hello world,请问最少复制粘 ...

  7. UVA.11464 Even Parity (思维题 开关问题)

    UVA.11464 Even Parity (思维题 开关问题) 题目大意 给出一个n*n的01方格,现在要求将其中的一些0转换为1,使得每个方格的上下左右格子的数字和为偶数(如果存在的话),求使得最 ...

  8. hdu4671 思维构造

    pid=4671">http://acm.hdu.edu.cn/showproblem.php? pid=4671 Problem Description Makomuno has N ...

  9. 思维/构造 HDOJ 5353 Average

    题目传送门 /* 思维/构造:赛后补的,当时觉得3题可以交差了,没想到这题也是可以做的.一看到这题就想到了UVA_11300(求最小交换数) 这题是简化版,只要判断行不行和行的方案就可以了,做法是枚举 ...

随机推荐

  1. MySQL数据库(7)_MySQL 数据备份与还原

    一.数据备份 1.使用mysqldump命令备份 mysqldump命令将数据库中的数据备份成一个文本文件.表的结构和表中的数据将存储在生成的文本文件中. mysqldump命令的工作原理很简单.它先 ...

  2. ZOJ 3959 Problem Preparation 【水】

    题目链接 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3959 AC代码 #include <cstdio> ...

  3. $用python处理Excel文档(2)——用xlsxwriter模块写xls/xlsx文档

    Refer:<python自动化运维:技术与最佳实践> 更多用法参考xlsxwriter官方文档:http://xlsxwriter.readthedocs.io/ 本文主要总结一下如何使 ...

  4. ETL应用:一种一次获取一个平台接口文件的方法

    ETL应用场景中,若对端接口文件未能提供,任务会处于循环等待,直到对端提供为止,该方法极大的消耗了系统资源.为此想到了一种方法,一次获取一个平台的文件,实现思路如下: 1.第一次获取对端平台提供目录下 ...

  5. 主攻ASP.NET.4.5.1 MVC5.0之重生:根据产品类别显示菜单分类和分页

    路径访问的几种方式和分页效果 显示其它类别的效果和多数据分页效果 默认访问网站路径效果和多数据分页效果 URL路径访问可页面 http://localhost:5339/stationery http ...

  6. crm销售管理系统一

    一.环境配置 1.首先配置pip,环境变量配置 pip 9.0.1 from c:\users\administrator\envs\crm\lib\site-packages (python 3.6 ...

  7. 20145239杜文超《网络对抗》- shellcode注入&Return-to-libc攻击深入

    20145239杜文超<网络对抗>- shellcode注入&Return-to-libc攻击深入 shellcode基础知识 Shellcode是一段代码,作为数据发送给受攻击服 ...

  8. Virtual Container Hosts(VCHs) 介绍

    In vSphere Integrated Containers, you deploy virtual container hosts (VCHs) that serve as Docker API ...

  9. Linux 系统密码破解

    (一)CentOS Linux 系统密码破解 1.在grub选项菜单按E进入编辑模式 2.编辑kernel那行 /init 1 (或/single) 3.按B重启 4.进入后执行下列命令 root@# ...

  10. thinkphp 多表事务处理

    try{ $this->user = D('User'); $this->user->startTrans(); //开始事务 $res = $this->user->S ...