CF1768D Lucky Permutation
给定整数 n 和一个 1∼n 的排列 p.
你可以对排列 p 进行下列操作任意次:
选择整数 i, j(1 ≤ i < j ≤ n),然后交换 pi, pj 的值.
你需要求出至少需要进行上述操作多少次才能使 p 恰有一个逆序对.
每个测试点包含 t 组数据.
1≤t≤1e4, 2≤n, ∑n≤2e5.
建边 i -> i 在 p 中出现的位置(下标), 这张图一定是若干个环.
操作等价于交换两个节点的后继节点,每次操作至多只会使环数 + 1,
1~n 顺序排列对应图的环数为 n, 则对 p 进行排序至少需要 K = n − 环数 K = n - 环数 K=n−环数 次操作.
考虑原问题,若建图后存在两相邻编号节点在同一环内, 则答案为 K + 1.
否则答案为 K - 1.
代码如下:
#include <bits/stdc++.h>using namespace std;inline int read() {int x = 0, f = 0; char ch = getchar();while (!isdigit(ch)) f = ch == '-', ch = getchar();while (isdigit(ch)) x = (x << 3) + (x << 1) + (ch ^ 48), ch = getchar();return f ? -x : x;
}const int N = 2e5 + 10;
int n, a[N], nex[N], st[N]; void work() {n = read(); for (int i = 1; i <= n; ++i) a[i] = read(), nex[a[i]] = i, st[i] = 0; int cnt = 0, flag = 1; for (int i = 1; i <= n; ++i) {if (!st[i]) {++cnt; int now = i; st[now] = cnt; while (!st[nex[now]]) now = nex[now], st[now] = cnt; }}for (int i = 1; i < n; ++i) if (st[i] == st[i + 1]) flag = -1;printf("%d\n", n - cnt + flag);
}int main() {int t = read(); while (t--) work(); return 0;
}
CF1768D Lucky Permutation相关推荐
- CodeForces - 287C Lucky Permutation(构造)
题目链接:点击查看 题目大意:构造一个合法的排列,满足 ppi=n−i+1p_{p_{i}}=n-i+1ppi=n−i+1 题目分析:因为第四个样例的存在降低了本题的难度,不然感觉还是有点难度的一 ...
- CF#303A Lucky Permutation Triple 数论
题意:要求给出一个数N的余数系的三个排列A, B, C,其中使得对于任意的 i 满足(A[i] + B[i]) % N = C[i]. 例如N=5的时候有一下排列: A: 1 4 3 2 0 B: 1 ...
- Codeforces Round #183 (Div. 2) C
思维题,想到就秒杀,没想到或者想错方向了那么就完蛋了 0 1 2 3 4 1 2 3 4 0 你就会发现是可以的. 我经历了很久错误的思维,找到了一些性质 1. ai+bi的和一定为一串从(n/2) ...
- Codeforces Round #183 (Div. 2)
A. Pythagorean Theorem II 暴力,\(O(n^2)\). B. Calendar 每个日期计算到0年1月1日的天数,相当于转化成前缀和形式. 闰年数计算\[\lfloor\fr ...
- CQUCQUPT联合狂欢赛小结
概述:今天25道题,AC了11道,不到一半的题.惭愧惭愧.不过还是颇有收获的.就AC题目和今晚补的题做些小结 狂欢赛链接:http://acm.hust.edu.cn/vjudge/contest/v ...
- Codeforces Round #842 (Div. 2) 个人题解
A. Greatest Convex 题意: 给t组数据,每组数据给定一个k,求出在[1,k)范围内,满足x!+(x-1)!%k==0的最大x 题解: 赛中可以通过观察法得知输出k-1即可,赛后可以尝 ...
- Circle of Mistery 2023牛客暑期多校训练营5 B
登录-专业IT笔试面试备考平台_牛客网 题目大意:给出一个n个数的数组a,求一个排列,使其形成的其中一个置换环上的数的和>=k,并使产生的逆序对数量最少 1<=n<=1e3;-1e6 ...
- hihocoder 1152 Lucky Substrings
#1152 : Lucky Substrings 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 A string s is LUCKY if and only if t ...
- 【C++】C++11 STL算法(七):排列操作(Permutation operations)、数值操作(Numeric operations)
排列操作(Permutation operations) 一.is_permutation 1.原型: template< class ForwardIt1, class ForwardIt2 ...
最新文章
- linux的 计划任务机制,自己带节奏
- 分别用Eigen和C++(OpenCV)实现图像(矩阵)转置
- js调用ios和安卓方法
- ASP.NET Web API 特性
- RabbitMQ队列持久化
- 应用程序添加到服务器,在同一应用程序中的配置服务器和eureka服务器:尝试连接到localhost:8761...
- Des与3Des加密解密
- WEY的广告上天了!CZ-11 WEY号火箭发射成功
- eclipse报错:“start ruble bundle manager”解决方法
- python变量赋值给数组_python 变量,数组,字符串
- SQL 四舍五入 同时取规定小数位的数值
- 编程语言EF速度测试(4):nsieve-bits
- OpenCV_Corner Detect with FastFeatureDetector(基于FAST的角点检测) 及 SUSAN算子
- 苹果4怎么越狱_它的维生素C含量是苹果的4倍,是我国第4大主粮,土豆怎么种植的...
- Autoit+selenium+python实现文件上传功能
- DCMM讲的数据“需求管理”,是什么?管理目标?如何实现?
- Tiki靶机(CMS漏洞)
- 1.1.26 word内容导入PPT
- 中兴换头;任正非表态中美差距还有 50 年;Google 回应隐私丑闻 | CSDN 极客头条...
- 小米笔记本电脑怎么使用U盘重装系统教学