题目链接

https://codeforces.com/contest/1372/problem/C

题面

题意

给定一个长度为n(n≤2e5)n(n\leq2e5)n(n≤2e5)的数组,你可以任意选择一个区间[L,R][L,R][L,R]使得区间内的数都不在原来位置上,问使该数组从小到大排序,最少经过的次数。

思路

不难想到只有三种情况:

1:原数组本身就是从小到大,答案为000,因为不需要排序。
2:记录从左边开始第一个不在自己位置的下标为lll,从右边边开始第一个不在自己位置的下标为rrr,[l,r][l,r][l,r]都不在自己的位置上,答案为111,因为我们只需要对这部分进行一次排序即可。
3:记录从左边开始第一个不在自己位置的下标为lll,从右边边开始第一个不在自己位置的下标为rrr,[l,r][l,r][l,r]存在至少有一个数在自己的位置上,答案为222,因为我们只需要对在自己位置上的这部分进行一次排序之后再将[l,r]进行排序即可。

ps:实在不太理解可以把在自己位置的数赋值为111,不在自己位置的赋值为222,比如"52341 “->“01110”,题目要求每个位置都不在原位置,那么你肯定要一次改变连续的"111"的位置然后不管咋样乱序都可以一次变为"11111”,这样才是最小次数,又比如:“12435”->“11001”,你肯定要一次改变连续的"00"的位置为"11",正确位置,这样才是最小次数。

参考代码

#include <algorithm>
#include <cstdio>
#include <vector>
using namespace std;
int main() {int t, n;scanf("%d", &t);while (t--) {scanf("%d", &n);vector<int> ans(n);for (auto &a : ans) {scanf("%d", &a);a--;}if (is_sorted(ans.begin(), ans.end())) {printf("0\n");} else {int l = 0, r = n;while (l < r && ans[l] == l) {l++;}while (r > l && ans[r - 1] == r - 1) {r--;}bool f = 0;for (int i = l; i < r; i++) {if (ans[i] == i) {f = 1;break;}}printf("%d\n", f ? 2 : 1);}}return 0;
}

Codeforces Round #655 (Div. 2) C相关推荐

  1. Codeforces Round #655 (Div. 2) D

    题目链接 https://codeforces.com/contest/1372/problem/D 题面 题意 给定n(n≤2e5)n(n\leq2e5)n(n≤2e5)个数字,组成一个环,每次你可 ...

  2. Codeforces Round #655 (Div. 2) A

    题目链接 https://codeforces.com/contest/1372/problem/A 题面 题意 对于给定的n(n≤1000)n(n \leq1000)n(n≤1000)找一个长度为n ...

  3. Codeforces Round #655 (Div. 2) E. Omkar and Last Floor 区间dp + 巧妙的状态设计

    传送门 题意: 思路: 按照贪心的思路来考虑的话,显然是每一列111的个数越多越好,所以我们能放到一列就放到一列.设f[l][r]f[l][r]f[l][r]为在[l,r][l,r][l,r]内,区间 ...

  4. Codeforces Round #655 (Div. 2) D. Omkar and Circle 思维 + 奇偶贪心

    传送门 题意: 给一个长为nnn的数组(nnn为奇数),iii与i−1i-1i−1相邻,111与nnn相邻,每次选择一个位置,将这个位置的值变成与它相邻的两个位置的和,让后将相邻位置删掉.求最终剩下一 ...

  5. Codeforces Round #655 (Div. 2) B. Omkar and Last Class of Math 数学

    传送门 题意: 找出A+B=nA+B=nA+B=n并且lcm⁡(A,B)\operatorname{lcm}(A,B)lcm(A,B)最小的AAA和BBB. 思路: nnn为偶数的时候答案肯定为都是n ...

  6. Codeforces Round #655 (Div. 2) B C

    代码如下: #include<iostream> #include<algorithm> #include<cstring> using namespace std ...

  7. Codeforces Round #655 (Div. 2)

    A Omkar and Completion 只要找两个相加不等的数交叉构造即可. AC代码: int main() {int t;sd(t);while (t--){sd(n);rep(i, 1, ...

  8. Codeforces Round #655 (Div. 2) ABCDEF题解

    题号 博客链接 cf分数 算法标签 A https://blog.nuoyanli.com/2020/07/14/codeforces-round-655-div-2-a/ 800 简单 B http ...

  9. Codeforces Round #655 (Div. 2) 题解

    A. Omkar and Completion 查看题解 构造 B. Omkar and Last Class of Math 查看题解 数学 C. Omkar and Baseball 查看题解 思 ...

最新文章

  1. 【实验】配置CISCO IOS基于区域的防火墙
  2. 【前端芝士树】Javascript的原型与原型链
  3. c语言限制字符数,C语言中“不受限制”的字符串函数总结.pdf
  4. CCIE理论-第八篇-SD-WAN(三)+DAI(动态ARP检测)
  5. C++ STL vector的构造
  6. Java Web编程技术
  7. 机器学习之神经网络学习及其模型
  8. weblogic部署linux静默安装,Linux环境下Weblogic11g中间件-静默安装详解
  9. linux 系统 cp: omitting directory 问题解决
  10. 微信商户转账到银行卡
  11. 毕业论文/分页符/段前2行没用
  12. 合天网安《Weekly CTF》第四周
  13. python docx首行缩进两字符的设定方法
  14. 解决Windows 10 无法安装.msi文件的办法
  15. dependencyManagement和dependencies区别
  16. 机器人鸣人是哪一集_博人传鸣人出场集数 博人传佐助哪几集出现过
  17. 企业邮箱登录地址,邮箱登录入口,邮箱登录须知
  18. 一文了解 DoH(DNS-over-HTTPS)和DoT(DNS-over-TLS)
  19. 2020年4月20日 星期一 晴 晚餐
  20. 【2022.1】触控板可以点击但无法滑动ThinkPad一个驱动问题

热门文章

  1. react 函数组件暴露方法
  2. Mysql 忘记root密码的完美解决方法
  3. c语言尾插法步骤,C语言尾插法链表
  4. java的发展历史 现状
  5. LeetCode-375.猜数字大小
  6. 【SAP-CO】成本中心实际过账
  7. 二次元个人主页html源码
  8. AI 腾讯云人脸核身之独立H5接入
  9. Cesium 视锥体绘制,并动态更新朝向
  10. 【考研英语-阅读-基础】中心思想题(干扰选项排除)