Codeforces Round #655 (Div. 2) C. Omkar and Baseball
2024-10-19 05:41:10
题目链接:https://codeforces.com/contest/1372/problem/C
题意
给出一个大小为 $n$ 的排列,每次操作可以选取一个连续子数组任意排列其中的元素,要求每个元素的位置必须与操作前不同,问将排列排为升序至少需要操作多少次。
题解
最多需要操作 $2$ 次,之后判断能否操作更少次即可。
如果已为升序,则不需要操作。
如果只有一个连续区间不为升序,如 $1,3,2,4,5$,只需要操作 $1$ 次。
否则需要操作 $2$ 次。
证明
第一次:选取整个数组,将所有 $a_i = i$ 的视为一体,在这个整体中每个元素循环右移一位,将余下 $a_i \neq i$ 的元素各自归位后也视为一体,在这个整体中的每个元素也循环右移一位。
第二次:选取整个数组,将第一次的两个整体中的元素各自循环左移一位。
代码
#include <bits/stdc++.h>
using namespace std; void solve() {
int n; cin >> n;
int a[n + 1] = {};
for (int i = 1; i <= n; i++)
cin >> a[i];
vector<int> v;
for (int i = 1; i <= n; i++)
if (a[i] != i)
v.push_back(i);
bool one_seg = true;
for (int i = 1; i < v.size(); i++)
if (v[i] - v[i - 1] > 1)
one_seg = false;
if (is_sorted(a + 1, a + 1 + n))
cout << 0 << "\n";
else if (one_seg)
cout << 1 << "\n";
else
cout << 2 << "\n";
} int main() {
int t; cin >> t;
while (t--) solve();
}
最新文章
- mysql 报错max_allowed_packet处理办法
- 三、基础功能模块,用户类别管理——锁、EF并发处理、领域服务、应用服务的划分
- 显式Intent和隐式Intent
- IOS推荐学习网站
- Xcode 8:在 Active Compilation Conditions 中自定义环境变量
- 使用VS2015(c#)进行单元测试,显示测试结果与查看代码覆盖率
- HDU 4483 Lattice triangle(欧拉函数)
- Android开发之单例模式
- 1613. For Fans of Statistics(STL)
- 配置struts tags 输出HTML
- 新的疑问(未解决):VC项目的配置,不是都能在Project -- Properties里设置解决的
- duilib DirectUI库里面的一个简单的例子RichListDemo
- STL";源码";剖析
- python 用嵌套列表做矩阵加法
- Javascript模块化简史
- 使用Vuex心得
- Java8之lambda表达式
- C#黎明前的黑暗
- 31 位域、空类的sizeof值
- PHP策略模式demo
热门文章
- [日常填坑系列]CAP食用指南-版本引用问题
- 【SpringMVC】SpringMVC 入门
- c++ 参数传递与返回值详解(reference)
- 为啥使用innodb_flush_method=o_direct 就能减轻io压力呢
- CTFshow-萌新赛逆向_签退
- ABAP-ALV-如何去掉OO方法中的ALV的标准按钮
- CSS响应式布局学习笔记(多种方法解决响应式问题)
- QQ刷屏助手
- 华为三层交换机限制vlan段的指定端口
- Optimal asymmetric encryption padding 最优非对称加密填充(OAEP)