分析:枚举序列起点和升降顺序,我写的很暴力,没有什么优化的地方。。。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <map>
#include <vector>
#include <queue>
#include <set>
#define FRER() freopen("in.txt","r",stdin)
#define FREW() freopen("out.txt","w",stdout)
#define go int T;cin>>T;for(int kase=1;kase<=T;kase++)
#define debug cout<<"****************"<<endl
#define mod 1000000007
using namespace std;
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair<int,int> pii;
template <class T> T gcd(T a,T b){return !b?a:gcd(b,a%b);}
const int maxn = 507 , inf = 0x3f3f3f3f;
int n;
void Swap(int i,int j,int *a,int *pos){swap(a[pos[i]],a[pos[j]]);swap(pos[j],pos[i]);
}
int a[maxn],b[maxn];
int posa[maxn],posb[maxn];
int main(){FRER();FREW();while(cin>>n&&n){for(int i=0;i<n;i++){cin >> a[i];posa[a[i]] = i;}int ans = inf;for(int k = 1;k<=n;k++){memcpy(b, a, sizeof(a));memcpy(posb, posa, sizeof(posa));int ans1 = 0, ans2 = 0;if(b[0]!=k){Swap(b[0], k, b, posb);ans1++;}for(int i=0;i<n;i++){if(b[i]==n){if(b[(i+1)%n]!=1){Swap(b[(i+1)%n], 1, b, posb);ans1++;}}else{if(b[(i+1)%n]!=b[i]+1){Swap(b[(i+1)%n], b[i]+1, b, posb);ans1++;}}}memcpy(b, a, sizeof(a));memcpy(posb, posa, sizeof(posa));if(b[0]!=k){Swap(b[0], k, b, posb);ans2++;}for(int i=0;i<n;i++){if(b[i]==1){if(b[(i+1)%n]!=n){Swap(b[(i+1)%n], n, b, posb);ans2++;}}else{if(b[(i+1)%n]!=b[i]-1){Swap(b[(i+1)%n], b[i]-1, b, posb);ans2++;}}}ans = min(ans,min(ans1,ans2));}cout<<ans<<endl;}
}

UVA 10570 Meeting with Aliens (枚举)相关推荐

  1. UVa 10570 - Meeting with Aliens

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  2. UVA 10570 Meeting with Aliens

    UVA_10570 一开始没有理解题目中所说的exchange positions,还以为只有相邻的才能换,后来发现不相邻的也可以换. 第一次AC的时候有点YY的味道,但后来想了一下,确实这么做是可以 ...

  3. uva 10570——Meeting with Aliens

    题意:输入1-n的排列,每次可以交换两个整数.用最少的次数把排列变成1-n的环状序列. 思路:枚举+贪心.依次枚举环上所有的点,正序一遍,倒序一遍,然后贪心求的所需的最小步数(贪心策略是1与1号交换, ...

  4. uva 10570—— Meeting with Aliens

    题意:n个外星人坐在一起,然后问通过交换多少次位置可以使正向或者反向是一个有序的序列. 思路:把n个外星人延长到2*n(因为有环),然后在1的位置上放1,2的位置放2,反向的话让序列倒过来重新操作一下 ...

  5. ACM 暴力枚举 Meeting with Aliens

    滴,集训第十天打卡. 终于认认真真的写了一天!!!可喜可贺啊~~~ 今天的训练算是有耐心都能写出来的,所以这里贴一题我首A的吧~~~ UVA 10570  Meeting with Aliens  题 ...

  6. UVA10570 Meeting with Aliens【数学计算】

    The aliens are in an important meeting just before landing on the earth. All the aliens sit around a ...

  7. UVA - 11059 Maximum Product-暴力枚举

    输入n个元素组成的序列s,找出一个乘积最大的连续子序列,如果这个子序列不是整数,则输出0. 解题思路: 枚举起点和终点,把中间的数相乘,然后找到最大的结果. 代码如下: #include <io ...

  8. 【CodeForces - 144B 】Meeting (暴力枚举,水题,计算几何)

    题干: The Super Duper Secret Meeting of the Super Duper Secret Military Squad takes place in a Super D ...

  9. UVA 12716 GCD XOR(数论+枚举+打表)

     题意:给你一个N,让你求有多少组A,B,  满足1<= B <= A <= N, 且 gcd(A,B) = A XOR B. 思路:首先我们能够得出两个结论: A-B > ...

最新文章

  1. java读取hdfs文件夹_HDFS 读取、写入、遍历文件夹获取文件全路径、append
  2. 关于ACCESS的事务与存储过程的调用
  3. Fuzzy C Means 算法及其 Python 实现——写得很清楚,见原文
  4. linux查询字段排序,Linux 操作命令 sort
  5. openpyxl库,1秒合并多张表格并设置图表格式
  6. 电脑进入pe时蓝屏_电脑进入PE会蓝屏是怎么回事?
  7. Devexpress VCL Build v2014 vol 14.1.4 发布
  8. 算法:POJ1007 DNA sorting
  9. android 视频通话开启呼叫等待后,来第三方的视频通话,接通后通话时间一直显示为0,过几秒之后视频通话自己主动挂断...
  10. linux文件内核目录,Linux内核目录文件简介
  11. CAD软件中怎么计算雨水?CAD雨水计算技巧
  12. 泛微OA7.0下载7.1下载
  13. 迅捷pdf虚拟打印机怎么安装使用
  14. [从头读历史] 第295节 神之物语 结语:为什么会有希腊神话
  15. golang:context介绍
  16. ActiveMQ的作用,原理是啥?
  17. springboot异步和切面_Spring异步编程 | 你的@Async就真的异步吗 ☞ 异步历险奇遇记...
  18. NFA到DFA的转换及DFA的简化
  19. 【5G核心网】5G概念之-MICO Mode
  20. 在北京工作了两年,现在跳槽到了广州,社保公积金该如何办理?

热门文章

  1. SAP 使用ABNAN后资本化和价值补录
  2. 解决AttributeError: module ‘win32com.gen_py.00020813-0000-0000-C000-000000000046x0x1x9‘ has no attribu
  3. 用Python写DES加解密的常用函数
  4. 流媒体客户端的流传送原理
  5. ERP系统的KPI指标建立与管理介绍
  6. Nginx集成GeoIP2模块实现地区识别与屏蔽
  7. 【matlab选题推荐四】基于图像识别的人脸考勤系统
  8. 核心网upf作用_5G核心网UPF硬件加速技术
  9. 数学建模常用方法 | matlab代码 | 二十三种数学建模方法 |2022赛前突击 |模型代码 |比赛比用、简单高效| 分享
  10. 项目中Swagger2、lombok(小辣椒)、以及短信API的调用 简单介绍