DVI2-D

思考:
首先题目就是说给一个序列,然后一个x,如果va[i]>x,那么他俩就可以交换。现在就问最少多少次可以成为非严格上升序列,如果不可能就-1。刚开始会想换最小的?,找环,其实上去实现起来又麻烦又不对,那么就要换思路了。那么首先,这个序列既然要升序,并且只有va[i]>x的时候可以换,可以思考出,这个x是越来越大的,这个x只能从前往后换,这样每次换的时候才能保证va是升序的。那这就很明显了,从前往后遍历一遍如果大于x就换然后ans++,然后接着判断是否is_sorted了。最后如果还未is_sorted那么就是-1,否则就是ans。

结论:
从前往后遍历,大于x就换,如果is_sorted了就break。

代码:

#include<iostream>
#include<cstring>
#include<string>
#include<math.h>
#include<algorithm>
#include<vector>
#include<queue>
#include<stack>
#include<map>
#include<set>
//#pragma GCC optimize(2)
#define eps 1e-9
#define fi first
#define se second
#define pb push_back
#define db double
#define ll long long
#define PII pair<int,int >
#define cin(x) scanf("%d",&x)
#define cout(x) printf("%d ",x)#define mem(a,b) memset(a,b,sizeof(a))
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define int llusing namespace std;const int N = 5e5,M = 2000;
const int mod = 1e9+7;
const int inf = 0x3f3f3f3f;
const double pai = acos(-1);int T,n,m;
int va[N];signed main()
{IOS;cin>>T;while(T--){cin>>n>>m;for(int i=1;i<=n;i++) cin>>va[i];if(is_sorted(va+1,va+1+n)){cout<<"0\n";continue;}int ans = 0;for(int i=1;i<=n;i++){if(va[i]>m){swap(va[i],m);ans++;}if(is_sorted(va+1,va+1+n)) break;   }if(is_sorted(va+1,va+1+n)) cout<<ans<<"\n";else cout<<-1<<"\n";}return 0;
}

总结:
当思路走不通的时候,及时去换一个简单的思考方式,这往往是对的。同时多使用is_sorted。

Sequence and Swaps相关推荐

  1. codeforces1455 D. Sequence and Swaps

    昨天晚上巨困,就没有打,今天课间的时候就看了一下D题,发现好像可以瞎搞,于是吃完饭就写了一下,调过样例一次就A了qaq. D. Sequence and Swaps 枚举+贪心 由于数据范围n≤500 ...

  2. D. Sequence and Swaps

    D. Sequence and Swaps 解题思路:因为n的范围是500,可以枚举,将a[i]与x替换,对形成的b数组排序,判断a数组能否转化成b数组. #include<bits/stdc+ ...

  3. 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 如果此 ...

  4. 1455D. Sequence and Swaps(思维)

    传送门 因为不论怎么交换 x x x的值,只要进去换了,必定会有一个原数组 a a a内的元素出来 由于 n n n不大我们果断枚举那个出来的元素,然后把 x x x加入进去 那么对这个新的数组 b ...

  5. 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 ...

  6. CodeForces 489A SwapSort (选择排序法)

    SwapSort 题目链接: http://acm.hust.edu.cn/vjudge/contest/121332#problem/A Description In this problem yo ...

  7. 920C. Swap Adjacent Elements

    You have an array a consisting of n integers. Each integer from 1 to n appears exactly once in this ...

  8. 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 ...

  9. 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. 利用RNN训练Seq2Seq已经成为过去,CNN才是未来?
  2. Javascrapy的window onload()函数用法
  3. R语言ggplot2可视化分面图(faceting)、在所有的分面中添加相同的参考基准曲线(overlay a base or reference plot to all facets )
  4. 网站搭建 (第09天) 博客统计排行
  5. ubuntu mysql 定时生成 备份文件 使用crontab 【个人笔记总结】
  6. altium如何制作mark点_如何选择一家优质的网站制作公司,看这2点
  7. sql server update触发器_SQL Server 触发器
  8. Docker认识基础
  9. 【原】unity shader(3)反射贴图
  10. kafka 生产和消费信息入门
  11. 2020年黑龙江省水稻种植分布数据
  12. lua : require' stn'
  13. CleanMyMac X2022纯净版苹果电脑管家
  14. 微信公众号登陆微商城
  15. springboot将文件响应给前端
  16. Android 返回桌面的操作
  17. 堆是先进先出,栈是先进后出
  18. Yuan先生博客-Django基础
  19. 人脸检测算法之 S3FD
  20. 服务器虚拟化解决方案

热门文章

  1. java gui 记_java GUI简单记事本
  2. 为什么我玩游戏那么卡?
  3. 第10章 集成MyBatis
  4. 吴晓波:预见2021(跨年演讲 —— 08 超级城市大赛鸣枪)
  5. 计算机什么是符号健,在电脑健盘上怎么打:符号
  6. 爬虫基本概念(新手必看)
  7. 技术水平:了解、熟悉、精通各是什么意思以及如何深入研究一门技术
  8. Unity3d 根据布线,自动生成碰撞墙
  9. C语言编程————杨辉三角
  10. js两种滚动事件写法