UVA 11925 Generating Permutations 逆向思维
来源:互联网 发布:什么赚钱软件最好 编辑:程序博客网 时间:2024/05/18 15:29
题意:
给出两种操作:
1.交换前两个数
2.将第一个数放到最后
求一种操作步骤,使得1到n的升序排列变为指定序列,操作数不得超过2*(n^2)。
可以考虑将目标序列变为升序。
采取
1.交换前两个数
2.将最后一个数放到最前
之后逆序输出。
至于放到最前最后,可以将问题等价为一个环,指针"指"的位置永远是第一个位置,然后指针在上面移动。
#include<cstdio>#include<string>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#include<vector>using namespace std;#define all(x) (x).begin(), (x).end()#define for0(a, n) for (int (a) = 0; (a) < (n); (a)++)#define for1(a, n) for (int (a) = 1; (a) <= (n); (a)++)typedef long long ll;typedef pair<int, int> pii;const int INF =0x3f3f3f3f;const int maxn= 300 ;int a[maxn+5],n;vector<int >ve;void work(){ int need=0,p=0,pos;ve.clear(); for0(i,n) { int t=(i+1)%n; if(a[t]==1) {pos=i;break;} } int st=(pos+1)%n; for(int i=(st+1)%n ;i!=st;i=(i+1)%n ) { for(int j=st;j!=i;j=(j+1)%n ) { if(a[j]>a[i]) need++; } } while( !( !need&&a[p]==1) ) { int q= (p+1)%n; if(p!=pos&&a[p]>a[q]) { swap(a[p],a[q]); ve.push_back(1); need--; continue; } ve.push_back(2); p= ((p-1)%n+n)%n; } for(int i=ve.size()-1;i>=0;i--) { printf("%d",ve[i]); } putchar('\n');}int main(){ while(~scanf("%d",&n)&&n) { for0(i,n) { scanf("%d",&a[i]); } work(); } return 0;}
0 0
- UVA 11925 Generating Permutations 逆向思维
- UVa:11925 Generating Permutations
- UVa 11925 - Generating Permutations
- UVa 11925 Generating Permutations
- UVa - 11925 - Generating Permutations
- UVA 11925 Generating Permutations
- UVA 11925 - Generating Permutations
- UVA - 11925 Generating Permutations 推理
- UVA 11925(p254)----Generating Permutations
- UVa #11925 Generating Permutations (习题8-7)
- UVa 11925 - Generating Permutations(构造法)
- UVa 11925:Generating Permutations(构造)
- uva 11925——Generating Permutations
- Generating Permutations UVA
- 11925 - Generating Permutations
- 习题8-7 UVA - 11925 Generating Permutations 生成排列(构造)
- 生成排列 Generating Permutations
- 逆向思维
- 路由网关转发配置
- android:layout_weight属性你真的理解吗
- 【Arduino官方教程第一辑】示例程序 1-3 点亮LED
- UVA 821 Page Hopping(最短路)
- 简单脱壳教程笔记(11) --- 脱WinUpack加的壳
- UVA 11925 Generating Permutations 逆向思维
- Java中文件的操作
- Java基础复习(四)
- S5PV210的ADC控制器
- HDU 5665 Lucky
- C#序列化与反序列化总结
- Ubuntu安装hadoop2.7.1----伪分布搭建
- view的分层显示
- 高斯消元模板