codeforces1455 D. Sequence and Swaps
昨天晚上巨困,就没有打,今天课间的时候就看了一下D题,发现好像可以瞎搞,于是吃完饭就写了一下,调过样例一次就A了qaq。
D. Sequence and Swaps
枚举+贪心
由于数据范围n≤500n\leq500n≤500,由此我们可以在n3n^3n3完成此题。
最后完成所有操作后,我们手中肯定还有一个数,我们考虑去枚举这个数。
最后手里的数一定不在最终的排列中,于是用一个数组b[]
把除了手中的数记录下来,不难发现只要排序一下这个所有数的位置就确定了。
模拟过程中,如果当前手中的数已经是枚举剩余的数之间跳出循环,如果不能交换说明不合法也直接跳出循环。
#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<random>
#include<bitset>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#include<unordered_set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=510;
int a[N],b[N],c[N];
bool st[N];
int main()
{IO;int T=1;cin>>T;while(T--){int n,x;cin>>n>>x;for(int i=1;i<=n;i++) cin>>a[i];bool fl=1;for(int i=2;i<=n;i++)//特判最后手中的数是 x 也就是不用操作if(a[i]<a[i-1]) fl=0;if(fl) {cout<<0<<'\n';continue;}a[n+1]=x;int res=0x3f3f3f3f;for(int i=1;i<=n;i++)// 枚举剩下的数是a[i]{for(int j=1;j<=n;j++){if(i==j)b[j]=x;elseb[j]=a[j];}sort(b+1,b+1+n);int tmp=x;memcpy(c,a,sizeof c);bool ok=1;int cnt=0;for(int j=1;j<=n;j++){memset(st,0,sizeof st);int k;for(k=1;k<=n;k++)// 找到当前手中的数应该所在的位置{if(b[k]==tmp&&c[k]!=tmp){while(st[k]||c[k]==tmp) k++;st[k]=1;break;}}if(c[k]>tmp) // 能不能执行交换操作{swap(c[k],tmp);cnt++;if(tmp==a[i]) break;//手中的数已经是枚举的数}else// 交换失败{ok=0;break;}}for(int i=2;i<=n;i++)if(c[i]<c[i-1]) ok=0;if(a[i]!=tmp) ok=0;// 最后手中的数tmp一定要等于枚举的数a[i]if(ok) res=min(res,cnt);}if(res==0x3f3f3f3f) cout<<-1<<'\n';else cout<<res<<'\n';}return 0;
}
感觉应该有复杂度更优的做法,但是我这个做法若优化感觉十分难写~~
codeforces1455 D. Sequence and Swaps相关推荐
- D. Sequence and Swaps
D. Sequence and Swaps 解题思路:因为n的范围是500,可以枚举,将a[i]与x替换,对形成的b数组排序,判断a数组能否转化成b数组. #include<bits/stdc+ ...
- Sequence and Swaps
DVI2-D 思考: 首先题目就是说给一个序列,然后一个x,如果va[i]>x,那么他俩就可以交换.现在就问最少多少次可以成为非严格上升序列,如果不可能就-1.刚开始会想换最小的?,找环,其实上 ...
- 1455 D. Sequence and Swaps(思维)
LINK 考虑枚举以 i i i位置作为开头而 j j j位置作为结尾位置,可以得到最后排序后的数组 那么扫描所有 a k ! = b k a_k!=b_k ak!=bk的索引 k k k 如果此 ...
- 1455D. Sequence and Swaps(思维)
传送门 因为不论怎么交换 x x x的值,只要进去换了,必定会有一个原数组 a a a内的元素出来 由于 n n n不大我们果断枚举那个出来的元素,然后把 x x x加入进去 那么对这个新的数组 b ...
- Educational Codeforces Round 37 (Rated for Div. 2)
我的代码应该不会被hack,立个flag A. Water The Garden time limit per test 1 second memory limit per test 256 mega ...
- CodeForces 489A SwapSort (选择排序法)
SwapSort 题目链接: http://acm.hust.edu.cn/vjudge/contest/121332#problem/A Description In this problem yo ...
- 920C. Swap Adjacent Elements
You have an array a consisting of n integers. Each integer from 1 to n appears exactly once in this ...
- Swap Adjacent Elements CodeForces - 920C
You have an array a consisting of n integers. Each integer from 1 to n appears exactly once in this ...
- Codeforces Round #277.5 (Div. 2) A,B,C,D,E,F题解
转载请注明出处: http://www.cnblogs.com/fraud/ --by fraud A. SwapSort time limit per test 1 sec ...
最新文章
- 1、初识Server API for JavaScript
- 拓扑排序之变量序列代码
- 里氏替换原则→类型转换
- python存文件的模块_python模块之StringIO/cStringIO(内存文件)
- 在CentOS 6上搭建LNMP环境
- python 人脸关键点检测_opencv+python+dlib人脸关键点检测、实时检测
- 4.MySQL基础操作
- 连载13:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)...
- C#算法设计排序篇之10-桶排序(附带动画演示程序)
- Guthrie QA-CAD2019(CAD绘图修订管理工具)A.04中文版
- Vivado时钟之间的三种关系
- 边拆边聊——简单了解DLP投影结构与成像原理
- python3的fft_Python fft.fft方法代码示例
- 什么是feature map
- linux镜像文件没有gho,【iso文件中没有gho文件】iso变gho_iso文件里没有gho-系统城...
- 电信网络性能质量测量
- 使用CAS框架快速实现单点登录
- 狼羊菜过河问题c语言算法,算法系列之十四:狼、羊、菜和农夫过河问题
- powerdesigner 16.5 关联mysql8.0
- Python 优化 回溯下降算法
热门文章
- android 弹窗有边框_Android 多种简单的弹出框样式设置代码
- 海德汉编程详细手册_UG编程海德汉系统螺旋铣孔最后一刀欠切解决方案
- mysql 精度_mysql-笔记 精度
- c语言实现灰度图像阈值分割,灰度图像--图像分割 阈值处理之平均阈值
- 手写一个简易bundler打包工具带你了解Webpack原理
- C++set容器-插入和删除
- Lambda表达式(多线程实现)
- 蓝桥杯 123 二分+打表
- Java BIO、NIO、AIO的区别
- hdu 1028 Ignatius and the Princess III 母函数入门