ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Codeforces Round #743 (Div. 2) B. Swaps(思维)

2022-08-21 18:04:45  阅读:226  来源: 互联网

标签:sort 743 Swaps int Codeforces cin mp 数组 任意


https://codeforces.com/contest/1573/problem/B

给定两个长度为n的数组,数组a和数组b
数组a包含从1到2*n的任意顺序的奇数,数组b包含从1到2*n的任意偶数

可执行的操作如下:

从两个数组中选择一个,从1到n-1中选择一个索引
交换第i和第i+1个元素
计算使得数组a在字典序上小于数组b的所需要的最少的移动次数。

input
3
2
3 1
4 2
3
5 3 1
2 4 6
5
7 5 9 1 3
2 4 6 10 8
output
0
2
3

  • 从数组a的小个数依从往右边取,合成minn
  • 与此同时,数组b也需要达到首位数字大于数组a的首位数字的效果
  • 就可以在从左往右中同步取最终最小的移动代价
#include<bits/stdc++.h>
using namespace std;
const int N=200200,M=2002;
int a[N],b[N];
int main()
{
    cin.tie(0); ios::sync_with_stdio(false);
    int T=1;
    cin>>T;
    while(T--)
    {
        int n;
        cin>>n;
        map<int,int> mp;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
            mp[a[i]]=i;
        }
        for(int i=1;i<=n;i++)
        {
            cin>>b[i];
            mp[b[i]]=i;
        }
        sort(a+1,a+1+n);
        sort(b+1,b+1+n);
        //for(int i=1;i<=n;i++) cout<<a[i]<<" "; cout<<endl;
        // for(int i=1;i<=n;i++) cout<<b[i]<<" "; cout<<endl;
        int minn=1e9,ans=1e9;
        for(int i=1;i<=n;i++)
        {
            minn=min(minn,mp[a[i]]);
            ans=min(ans,minn+mp[b[i]]-2);
            //cout<<minn<<" "<<ans<<endl;
        }
        cout<<ans<<endl;
    }
    return 0;
}

标签:sort,743,Swaps,int,Codeforces,cin,mp,数组,任意
来源: https://www.cnblogs.com/Vivian-0918/p/16610422.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有