news 2026/11/2 15:25:16

小Why的循环置换【牛客tracker 每日一题】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
小Why的循环置换【牛客tracker 每日一题】

小Why的循环置换

时间限制:1 秒
空间限制:256M

网页链接

牛客tracker

牛客tracker & 每日一题,完成每日打卡,即可获得牛币。获得相应数量的牛币,能在【牛币兑换中心】,换取相应奖品!助力每日有题做,丰盈牛币日益多!


题目描述

小Why有一个长度为n nn的全排列a aa,定义p x p_xpx​表示元素x xx在a aa中的下标。

小Why先将上述n nn个元素映射为图G GG中的点,之后对于每个点x xx,都向p x p_xpx​连一条边。在完成这些操作后,图G GG中一共出现了m mm个环(包括自环)。

现在小Why告诉你可以对a aa执行以下操作任意多次:

小Why只打算告诉你n nn和m mm,他想考考你至少需要多少次操作才能使得a aa单调递增。


输入描述

第一行包含两个整数n , m ( 1 ≤ m ≤ n ≤ 10 9 ) n, m\ (1 \le m \le n \le 10^9)n,m(1≤m≤n≤109),表示图G GG中点的个数和环的个数。


输出描述

输出一个整数,表示最少操作次数。


示例

示例 1

输入:

2 1

输出:

1

数据范围

解题思路

本题是置换环分解 + 贪心的经典问题。给定一个长度为n nn的全排列a aa,定义p x p_xpx​为元素x xx在a aa中的下标。图G GG中每个点x xx向p x p_xpx​连一条有向边,已知图中共有m mm个环。每次可以交换a aa中任意两个元素的位置,求使a aa单调递增所需的最少交换次数。

1. 问题等价转化
2. 交换操作对环数的影响

交换a aa中两个位置上的元素,等价于在置换p pp中交换两个元素对应的像。对于置换的环分解:

为了使环数尽快增加到n nn,每次应选择同一个环中的两个元素进行交换,使环数增加1 11。

3. 最优次数
4. 算法实现
5. 复杂度分析

总结

将排列映射为置换图后,问题转化为通过交换元素将置换的环数从m mm增加到n nn。每次交换同一环中的两个元素可使环数增加1 11,因此最少操作次数为n − m n-mn−m。该方法巧妙利用置换环的性质,将复杂的交换过程抽象为环数的变化,实现极其简洁高效。

代码内容

#include<bits/stdc++.h>usingnamespacestd;#defineendl'\n'typedeflonglongll;typedefunsignedlonglongull;typedefvector<vector<ll>>vvt;typedefpair<ll,ll>pll;constll N=1e3+10;constll INF=1e18;constll M=1e6+10;constll mod=1e9+7;intmain(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);ll n,m;cin>>n>>m;cout<<n-m<<'\n';return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/2 15:03:24

Dolphin-Mistral 24B威尼斯版:掌控你的无审查AI

Dolphin-Mistral 24B威尼斯版&#xff1a;掌控你的无审查AI 导语&#xff1a;Dolphin-Mistral 24B威尼斯版正式发布&#xff0c;这款由dphn.ai与Venice.ai联合打造的大语言模型以"无审查"和"用户控制权"为核心卖点&#xff0c;挑战现有AI服务模式&#xff…

作者头像 李华
网站建设 2026/11/2 14:55:48

C++仿C#实现事件处理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/2 14:51:52

自研轻量级服务监控雷达:主动探活、负载感知与告警实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/2 14:51:48

PLFM_RADAR:可编程线性调频雷达完整信号处理链路解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/2 14:51:31

用Python自建平台雷达:网页变化监控与自动通知实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华