本题要求构造一个长度为 n 的排列(每个整数 1 到 n 恰好出现一次),使得排列的“错位”总数恰好等于给定的 k。这里“错位”的定义即为通常的逆序对:若 i<j 且 ai>aj,则 (i,j) 是一对错位。
我们可以使用贪心策略,从 1 到 n 依次确定每个位置的数字。用两个指针 L=1 和 R=n 维护当前还未使用的数字区间 [L,R]:
小明在整理一套编号为 1 到 n 的卡片。他将卡片排成一排,发现如果较大的编号排在了较小编号的前面,就会形成一个“错位”。具体来说,对于一个序列 a1,a2,…,an(每个整数 1 到 n 恰好出现一次),如果存在 1≤i<j≤n 满足 ai>aj,则称 (i,j) 为一对错位。序列的错位总数就是所有错位的对数。
现在小明想要重新排列这些卡片,使得最终的错位总数恰好为 k。请你帮他找到一种满足条件的排列方式。
整数 n 满足 1≤n≤1000,整数 k 满足 0≤k≤2n(n−1)。
输入包含一行两个正整数 n 和 k,用一个空格分隔。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册