CF1768B Quick Sort

CF1768B Quick Sort

题目传送门

一道思维题。

由于他要求的是使得操作次数最小,那么显然就是要使要被操作的数最少。

我们考虑绝对不用交换的数,那么就是如果是 [1,n][1,n] 之间的递增且差值为 11 的序列的话,就绝对不需要进行任何操作了,因为他是 [1,n][1,n] 之间的一个排列,所以我们应该尽可能找到一个从 11 开始的,差值为 11 的递增的最大的一个序列。

一定要找差值为 11 的原因是如果差值不是 11 的话,假设 [i,j][i,j] 差值不是 11,那么中间肯定还有一些数可以进行插入,所以就浪费一次操作了。

然后对于剩下的数,我们把他加到末尾以后,我们就可以对他贪心的选择 kk 个数进行操作,也就是按照题意排序,这样就可以使整个序列有序了。

#include<bits/stdc++.h>
using namespace std;
const int N =1e6+10;
int a[N];
int main()
{
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	int n,m,t;
	cin>>t;
	while(t--)
	{
		cin>>n>>m;
		for(int i=1;i<=n;i++)
			cin>>a[i];
		int step=1;
		for(int i=1;i<=n;i++)
			if(a[i]==step)
				step++;
		step--;
		int last=n-step;
		if((last%m)==0)
			cout<<last/m<<endl;
		else
			cout<<last/m+1<<endl;
	}
	return 0;
}
posted @   June_Failure  阅读(1)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示