UVA 10570 Meeting with Aliens (枚举)
分析:枚举序列起点和升降顺序,我写的很暴力,没有什么优化的地方。。。
#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 (枚举)相关推荐
- UVa 10570 - Meeting with Aliens
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVA 10570 Meeting with Aliens
UVA_10570 一开始没有理解题目中所说的exchange positions,还以为只有相邻的才能换,后来发现不相邻的也可以换. 第一次AC的时候有点YY的味道,但后来想了一下,确实这么做是可以 ...
- uva 10570——Meeting with Aliens
题意:输入1-n的排列,每次可以交换两个整数.用最少的次数把排列变成1-n的环状序列. 思路:枚举+贪心.依次枚举环上所有的点,正序一遍,倒序一遍,然后贪心求的所需的最小步数(贪心策略是1与1号交换, ...
- uva 10570—— Meeting with Aliens
题意:n个外星人坐在一起,然后问通过交换多少次位置可以使正向或者反向是一个有序的序列. 思路:把n个外星人延长到2*n(因为有环),然后在1的位置上放1,2的位置放2,反向的话让序列倒过来重新操作一下 ...
- ACM 暴力枚举 Meeting with Aliens
滴,集训第十天打卡. 终于认认真真的写了一天!!!可喜可贺啊~~~ 今天的训练算是有耐心都能写出来的,所以这里贴一题我首A的吧~~~ UVA 10570 Meeting with Aliens 题 ...
- UVA10570 Meeting with Aliens【数学计算】
The aliens are in an important meeting just before landing on the earth. All the aliens sit around a ...
- UVA - 11059 Maximum Product-暴力枚举
输入n个元素组成的序列s,找出一个乘积最大的连续子序列,如果这个子序列不是整数,则输出0. 解题思路: 枚举起点和终点,把中间的数相乘,然后找到最大的结果. 代码如下: #include <io ...
- 【CodeForces - 144B 】Meeting (暴力枚举,水题,计算几何)
题干: The Super Duper Secret Meeting of the Super Duper Secret Military Squad takes place in a Super D ...
- UVA 12716 GCD XOR(数论+枚举+打表)
题意:给你一个N,让你求有多少组A,B, 满足1<= B <= A <= N, 且 gcd(A,B) = A XOR B. 思路:首先我们能够得出两个结论: A-B > ...
最新文章
- java读取hdfs文件夹_HDFS 读取、写入、遍历文件夹获取文件全路径、append
- 关于ACCESS的事务与存储过程的调用
- Fuzzy C Means 算法及其 Python 实现——写得很清楚,见原文
- linux查询字段排序,Linux 操作命令 sort
- openpyxl库,1秒合并多张表格并设置图表格式
- 电脑进入pe时蓝屏_电脑进入PE会蓝屏是怎么回事?
- Devexpress VCL Build v2014 vol 14.1.4 发布
- 算法:POJ1007 DNA sorting
- android 视频通话开启呼叫等待后,来第三方的视频通话,接通后通话时间一直显示为0,过几秒之后视频通话自己主动挂断...
- linux文件内核目录,Linux内核目录文件简介
- CAD软件中怎么计算雨水?CAD雨水计算技巧
- 泛微OA7.0下载7.1下载
- 迅捷pdf虚拟打印机怎么安装使用
- [从头读历史] 第295节 神之物语 结语:为什么会有希腊神话
- golang:context介绍
- ActiveMQ的作用,原理是啥?
- springboot异步和切面_Spring异步编程 | 你的@Async就真的异步吗 ☞ 异步历险奇遇记...
- NFA到DFA的转换及DFA的简化
- 【5G核心网】5G概念之-MICO Mode
- 在北京工作了两年,现在跳槽到了广州,社保公积金该如何办理?
热门文章
- SAP 使用ABNAN后资本化和价值补录
- 解决AttributeError: module ‘win32com.gen_py.00020813-0000-0000-C000-000000000046x0x1x9‘ has no attribu
- 用Python写DES加解密的常用函数
- 流媒体客户端的流传送原理
- ERP系统的KPI指标建立与管理介绍
- Nginx集成GeoIP2模块实现地区识别与屏蔽
- 【matlab选题推荐四】基于图像识别的人脸考勤系统
- 核心网upf作用_5G核心网UPF硬件加速技术
- 数学建模常用方法 | matlab代码 | 二十三种数学建模方法 |2022赛前突击 |模型代码 |比赛比用、简单高效| 分享
- 项目中Swagger2、lombok(小辣椒)、以及短信API的调用 简单介绍