0
点赞
收藏
分享

微信扫一扫

CF1573B. Swaps(思维)

M4Y 2022-07-14 阅读 61


​​linkkk​​​ 题意:
的奇数任意顺序放到数组,偶数任意顺序放到数组。每次可以交换某数组的相邻两项,问的最小操作次数。
思路:
元素互不相同,比较第一个就行。
每次可以只移动中元素或中元素或两者都移动,考虑怎么计算最优。
枚举的首元素是哪个就可以了。
表示将移动到首位需要的次数。
倒着遍历,遇到奇数的话更新答案,遇到偶数的话更新将元素移动到首位的最小次数,由于是倒着枚举,所以对于奇数来说,后面的偶数比他大,次数还小,所以一定满足
代码:

#include<bits/stdc++.h>
using namespace std;

const int maxn=1e5+10,inf=0x3f3f3f3f;

int a[maxn],b[maxn];
map<int,int>mp;

int main(){
int _;cin>>_;
while(_--){
int n;cin>>n;
for(int i=1;i<=n;i++) cin>>a[i],mp[a[i]]=i-1;
for(int i=1;i<=n;i++) cin>>b[i],mp[b[i]]=i-1;
int ans=inf,res=inf;
for(int i=2*n;i;i--)
if(i&1) ans=min(ans,mp[i]+res);
else res=min(res,mp[i]);
cout<<ans<<endl;
}
return 0;
}
/*
3
3 5 1
2 4 6
*/


举报

相关推荐

0 条评论