题目传送门:https://ac.nowcoder.com/acm/contest/551#question

题目描述

有两个长度为 n 的序列,a0,a1,…,an−1a0,a1,…,an−1和 b0,b1,…,bn−1b0,b1,…,bn−1。CSL 有一种魔法,每执行一次魔法,可以任意挑选一个序列并任意交换序列中两个元素的位置。CSL 使用若干次魔法,得到最终的序列 a 和 b,并且想要让 a0b0+a1b1+…+an−1bn−1a0b0+a1b1+…+an−1bn−1的值最小化。求解 CSL 至少使用多少次魔法,能够达到最小化的目标。

输入描述:

  1. 第一行有一个整数 n,表示序列的长度。
  2.  
  3. 接下来两行,每行有 n 个整数,分别表示初始序列 a b
输入数据保证每个序列里的数两两不同。
 
2≤n≤1052≤n≤105
1≤ai,bi≤1091≤ai,bi≤109

输出描述:

  1. 在一行输出一个整数,表示最少使用的魔法次数。
示例1

输入

复制

  1. 2
  2. 1 2
  3. 1 2

输出

复制

  1. 1
示例2

输入

复制

  1. 2
  2. 1 2
  3. 2 1

输出

复制

  1. 0

解题思路:

注意一个bug点即可:

给出的a b 序列的数不一定相同。

所以对于 两个序列都要进行排序,然后map映射一下原序列每个数对应的位置,每个数的排名。

然后以其中一个序列为参考,扫一遍,最大的匹配另一个序列里最小的,不能匹配则交换序列里两个数的位置。

AC code:

  1. #include <bits/stdc++.h>
  2. #define INF 0x3f3f3f3f
  3. #define LL long long
  4. #define inc(i, j, k) for(int i = j; i <= k; i++)
  5. #define rep(i, j, k) for(int i = j; i < k; i++)
  6. #define mem(i, j) memset(i, j, sizeof(i))
  7. #define gcd(i, j) __gcd(i, j)
  8. using namespace std;
  9. const int MAXN = 2e5+;
  10. map<int, int>ida, idb, xa, xb;
  11. int a[MAXN], b[MAXN], tpa[MAXN], tpb[MAXN];
  12.  
  13. bool cmp(int a, int b)
  14. {
  15. return a > b;
  16. }
  17. int N;
  18.  
  19. int main()
  20. {
  21. scanf("%d", &N);
  22. inc(i, , N){ scanf("%d", &a[i]); tpa[i] = a[i]; xa[a[i]] = i;}
  23. inc(i, , N){ scanf("%d", &b[i]); tpb[i] = b[i]; xb[b[i]] = i;}
  24. sort(tpa+, tpa++N);
  25. inc(i, , N) ida[tpa[i]] = i;
  26. sort(tpb+, tpb++N, cmp);
  27. inc(i, , N) idb[tpb[i]] = i;
  28. int ans = ;
  29. inc(i, , N)
  30. {
  31. if(ida[a[i]] != idb[b[i]]){
  32. ans++;
  33. int nxtb = tpb[ida[a[i]]];
  34. int nxt = xb[nxtb];
  35. xb[b[i]] = nxt;
  36. xb[b[nxt]] = i;
  37. swap(b[i], b[nxt]);
  38. }
  39. }
  40.  
  41. printf("%d\n", ans);
  42. return ;
  43. }

E、CSL 的魔法 【模拟】 (“新智认知”杯上海高校程序设计竞赛暨第十七届上海大学程序设计春季联赛)的更多相关文章

  1. H、CSL 的拼图 【多维点的交换】 (“新智认知”杯上海高校程序设计竞赛暨第十七届上海大学程序设计春季联赛)

    题目传送门:https://ac.nowcoder.com/acm/contest/551/H 题目描述 众所周知 CSL 不仅玩魔方很强,打麻将也很强.今天他打魔法麻将的时候,在路上撞到了一个被打乱 ...

  2. D、CSL 的字符串 【栈+贪心】 (“新智认知”杯上海高校程序设计竞赛暨第十七届上海大学程序设计春季联赛)

    题目传送门:https://ac.nowcoder.com/acm/contest/551#question 题目描述 CSL 以前不会字符串算法,经过一年的训练,他还是不会……于是他打算向你求助. ...

  3. C、CSL 的密码 【set暴力 || 后缀数组】 (“新智认知”杯上海高校程序设计竞赛暨第十七届上海大学程序设计春季联赛 )

    题目传送门:https://ac.nowcoder.com/acm/contest/551/C 题目描述 众所周知,CSL 最喜欢的密码是 ******.于是有一天……     为了改变这一点,他决定 ...

  4. G、CSL 的训练计划【BFS 贪心】(“新智认知”杯上海高校程序设计竞赛暨第十七届上海大学程序设计春季联赛)

    题目传送门:https://ac.nowcoder.com/acm/contest/551/G 链接:https://ac.nowcoder.com/acm/contest/551/G来源:牛客网 题 ...

  5. F、CSL 的神奇序列 【规律】 (“新智认知”杯上海高校程序设计竞赛暨第十七届上海大学程序设计春季联赛)

    题目传送门:https://ac.nowcoder.com/acm/contest/551/F 题目描述 CSL 有一个神奇的无穷实数序列,他的每一项满足如下关系: 对于任意的正整数 n ,有 n∑k ...

  6. “新智认知”杯上海高校程序设计竞赛暨第十七届上海大学程序设计春季联赛(D题,贪心+栈)

    链接:https://ac.nowcoder.com/acm/contest/551/D来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语言10485 ...

  7. HDU 5933 ArcSoft's Office Rearrangement 【模拟】(2016年中国大学生程序设计竞赛(杭州))

    ArcSoft's Office Rearrangement Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ...

  8. HDU 5968 异或密码 【模拟】 2016年中国大学生程序设计竞赛(合肥)

    异或密码 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Des ...

  9. HDU 5965 扫雷 【模拟】 (2016年中国大学生程序设计竞赛(合肥))

    扫雷 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submissi ...

随机推荐

  1. Visual studio 2017 c++ wcout 无法输出中文

    wcout.imbue(locale(locale(), "", LC_CTYPE));

  2. nodejs搭建简易的rpc服务

    这里主要使用的是jayson包,使用jayson实现rpc server端十分简单,如下: var jayson = require('jayson') // create a server var ...

  3. 七、spark核心数据集RDD

    简介 spark RDD操作具体参考官网:http://spark.apache.org/docs/latest/rdd-programming-guide.html#overview RDD全称叫做 ...

  4. 【SSH网上商城项目实战10】商品类基本模块的搭建

    转自:https://blog.csdn.net/eson_15/article/details/51354932 前面我们完成了与商品类别相关的业务逻辑,接下来我们开始做具体商品部分. 1. 数据库 ...

  5. Hunger Snake 2

  6. C#学习笔记-继承基本知识

    namespace Inheritance { class Program { static void Main(string[] args) { Dog dog = new Dog(); dog.A ...

  7. JavaWeb学习总结(十一):Session解决form表单重复提交

    在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...

  8. js图片跟随鼠标移动

    <div id="wrapper"><img src="http://images.cnblogs.com/cnblogs_com/rain-null/ ...

  9. vue2.0路由写法

    // 0. 如果使用模块化机制编程,導入Vue和VueRouter,要调用 Vue.use(VueRouter) // 1. 定义(路由)组件. // 可以从其他文件 import 进来 var Fo ...

  10. C# 读取excel用户列表过滤一个月内未收到外部邮件已离职的员工

    1.通过aspose.cells读取excel中的数据并添加到list中 //存储从excel中读取出来的数据 List<UserInfo> lst_userinfo = new List ...