uva10570 外星人聚会 环状序列
2016-08-05 00:46
537 查看
环状序列通常有两种方法:
延长二倍序列,利用线性模拟环。
利用取余改变下标。
枚举定起点>>求交换次数。
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=23446
延长二倍序列,利用线性模拟环。
利用取余改变下标。
枚举定起点>>求交换次数。
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=23446
#include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <string> #include <algorithm> using namespace std; const int MAXN = 510; const int INF = 0x3f3f3f3f; int a[MAXN*2]; int n; int f(int a[], int n) //求最小交换次数 { bool vis[MAXN] = {0}; int c = 0; for(int i = 0; i < n; i++) if(!vis[i]) { c++; for(int x = i; !vis[x]; x = a[x]) vis[x] = 1; } return n-c; } int read_case() { scanf("%d", &n); if(!n) return 0; for(int i = 0; i < n; i++) { scanf("%d", &a[i]); a[i]--; } return 1; } void solve() { int ans = INF; for(int k = 0; k < 2; k++) //正、反两次 { for(int i = 0; i < n; i++) a[n+i] = sa[i]; for(int i = 0; i < n; i++) ans = min(ans, f(a+i, n)); //枚举起点 reverse(a, a+n); //取反 } printf("%d\n", ans); } int main() { while(read_case()) { solve(); } return 0; }
相关文章推荐
- UVA 10570 Meeting with Aliens 外星人聚会
- UVa 10570 外星人聚会
- uva10570---外星人聚会(meeting with aliens)
- 环状序列(Circular Sequence, ACM/ICPC Seoul 2004, UVa1584)
- 环状序列,ACM/ICPC,UVa1584
- 3_6 环状序列(UVa1584)
- UVA.1584 环状序列
- 2018.2.21【 UVa - 1584 】解题报告(紫书例题,环状序列,字典序)
- 例题3-6 环状序列(CircularSequence, ACM/ICPC Seoul 2004, UVa1584)
- UVa1584 环状序列 (Circular Sequence)
- 环状序列UVa1584紫苏第三章
- UVa1584 Circular Sequence(环状序列) (java版本)
- UVa 1584 Circular Sequence(环状序列)
- 20160321 UVa RUJIA 算法竞赛入门经典:镜像回文,生成元,环状序列
- uva10570 - Meeting with Aliens(会见外星人)
- 环状序列(UVa1584)
- 环状序列(UVA1584)
- 例题3-6 环状序列 UVa1584
- 【紫书】例题3-6 环状序列(Circular Sequence, ACM/ICPC Seoul 2004, UVa1584)
- 紫书第三章 UVa 1584[环状序列]