题意:给定一个排列,每次可交换两个数,用最少的次数把它变成一个1~n的环状排列。

析:暴力题。很容易想到,把所有的情况都算一下,然后再选出次数最少的那一个,也就是说,我们把所有的可能的形成环状排列全算一下,然后选出最少的。

那么就开一个两倍的数组,然后两遍从1到n,然后每次选 n 个,进行暴力,每找一个不同的,就去找这个位置应该放的,然后交换。注意两次正序和逆序暴力。

#include <iostream>
#include <cmath>
#include <cstdlib>
#include <set>
#include <cstdio>
#include <cstring> using namespace std;
typedef long long LL;
const int INF = 0x3f3f3f3f;
const int maxn = 500 + 5;
int a[maxn], b[maxn<<1], c[maxn], d[maxn<<1]; int main(){
int n;
while(scanf("%d", &n) == 1 && n){
int ans = INF;
for(int i = 0; i < n; ++i){ scanf("%d", a+i); b[i] = i+1; }
memcpy(b+n, b, sizeof(int)*n);
memcpy(c, a, sizeof(a)); for(int k = 0; k < n; ++k){
int cnt = 0;
memcpy(a, c, sizeof(a)); for(int i = 0, j = k; i < n && cnt < ans; ++j, ++i){
if(a[i] == b[j]) continue;
for(int l = i+1; l < n; ++l) if(b[j] == a[l]){
a[l] = a[i];
a[i] = b[j];
break;
}
++cnt;
}
ans = min(ans, cnt);
} for(int i = 0; i < n; ++i) d[i] = n-i;
memcpy(d+n, d, sizeof(int)*n);
for(int k = 0; k < n; ++k){
int cnt = 0;
memcpy(a, c, sizeof(a));
for(int i = 0, j = k; i < n && cnt < ans; ++j, ++i){
if(a[i] == d[j]) continue;
for(int l = i+1; l < n; ++l) if(d[j] == a[l]){
a[l] = a[i];
a[i] = d[j];
break;
}
++cnt;
}
ans = min(ans, cnt);
}
printf("%d\n", ans);
}
return 0;
}

代码如下:

UVa 10570 Meeting with Aliens (暴力)的更多相关文章

  1. UVA - 10570 Meeting with Aliens(外星人聚会)(暴力枚举)

    题意:输入1~n的一个排列(3<=n<=500),每次可以交换两个整数.用最少的交换次数把排列变成1~n的一个环状序列. 分析:正序反序皆可.枚举每一个起点,求最少交换次数,取最小值. 求 ...

  2. UVA 10570 Meeting with Aliens

    题意: N个外星人围成一桌坐下,有序的排列指N在N-1与N+1中间,现在给出一个序列,问至少交换几次可以得到有序的序列. 分析: 复制一遍输入序列,放在原序列之后.相当于环.通过枚举,可以把最小交换次 ...

  3. UVA - 10570 Meeting with Aliens (置换的循环节)

    给出一个长度不超过500的环状排列,每次操作可以交换任意两个数,求把这个排列变成有序的环状排列所需的最小操作次数. 首先把环状排列的起点固定使其成为链状排列a,枚举排好序时的状态b(一种有2n种可能) ...

  4. UVA 10570 Meeting with Aliens 外星人聚会

    题意:给你一个排列,每次可以交换两个整数(不一定要相邻),求最少交换次数把排列变成一个1~n的环形排列.(正反都算) 其实就是找环了,对于一个链状序列,最小交换次数等于不在对应位置的数字个数减去环的个 ...

  5. UVA-10570 Meeting with Aliens (枚举+贪心)

    题目大意:将一个1~n的环形排列变成升序的,最少需要几次操作?每次操作可以交换任意两个数字. 题目分析:枚举出1的位置.贪心策略:每次操作都保证至少一个数字交换到正确位置上. # include< ...

  6. UVA.129 Krypton Factor (搜索+暴力)

    UVA.129 Krypton Factor (搜索+暴力) 题意分析 搜索的策略是:优先找长串,若长串不合法,则回溯,继续找到合法串,直到找到所求合法串的编号,输出即可. 注意的地方就是合法串的判断 ...

  7. UVA.10986 Fractions Again (经典暴力)

    UVA.10986 Fractions Again (经典暴力) 题意分析 同样只枚举1个,根据条件算出另外一个. 代码总览 #include <iostream> #include &l ...

  8. 【uva 10570】Meeting with Aliens(算法效率--暴力+贪心)

    题意:输入1~N的一个排列,每次可以交换2个整数,问使排列变成1~N的一个环状排列所需的虽少交换次数.(3≤N≤500) 解法:(又是一道我没打代码,光想和看就花了很久时间的题~QwQ)由于n很小,可 ...

  9. 【习题 8-13 UVA - 10570】Meeting with Aliens

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 枚举1的位置在i 往右摆成一排. a[i+1]..a[n]..a[1]..a[i-1]变为有序的 ->寻找循环节,每个循环节的 ...

随机推荐

  1. HDU 1358 Period (kmp判断循环子串)

    Period Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submis ...

  2. MySql存储过程简单实例

    转自:http://www.cnblogs.com/zhuawang/p/4185302.html ********************* 创建表 ************************ ...

  3. CSS布局模型学习

    转自:http://www.cnblogs.com/erliang/p/4092192.html CSS布局模型学习   参考链接慕课网:HTML+CSS基础课程 知识基础 1. 样式 内联 嵌入 外 ...

  4. Keras函数式 API

    用Keras定义网络模型有两种方式, Sequential 顺序模型 Keras 函数式 API模型 之前我们介绍了Sequential顺序模型,今天我们来接触一下 Keras 的函数式API模型. ...

  5. How to create a site with AJAX enabled in MVC framework.

    How to create a site with AJAX enabled in MVC framework. The Project illustrates how to create a web ...

  6. Vim中nerdtree配置

    nerdtree nerdtree,就是一个文件树目录. 配置脚本 "文件树 Plug 'scrooloose/nerdtree' Plug 'Xuyuanp/nerdtree-git-pl ...

  7. 解决Visual Studio Community 2017工具栏中没有Report Viewer的问题

    选择“工具”>“Nuget包管理器”>“程序包管理器控制台” 执行命令:Install-Package Microsoft.ReportingServices.ReportViewerCo ...

  8. Git---时光穿梭机之版本回退02

    现在你的本地仓库底下添加一个readme.txt文件 第一次readme.txt的内容如下:: Git is a version control systemGit is free sofwore 然 ...

  9. sql日期查询

    select getdate() ,getdate()) ,getdate()) ) ,getdate())) ,getdate())) Select datename(weekday, getdat ...

  10. 【334】Python Object-Oriented Programming

    Reference: Python中self用法详解 __init__ 方法: 私有变量. Reference: [290]Python 函数 class 里面的 function 创建与此一致,只是 ...