【“新智认知”杯上海大学联赛】E-CSL的魔法(序列b到序列b‘需要的数据交换次数)
题目地址:https://ac.nowcoder.com/acm/contest/551/E
题目描述
有两个长度为 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 至少使用多少次魔法,能够达到最小化的目标。
输入描述:
第一行有一个整数 n,表示序列的长度。接下来两行,每行有 n 个整数,分别表示初始序列 a 和 b。输入数据保证每个序列里的数两两不同。
输出描述:
在一行输出一个整数,表示最少使用的魔法次数。
示例1
输入
2
1 2
1 2
输出
1
示例2
输入
2
1 2
2 1
输出
0
解题思路:
首先会想到让a序列从大到小排,b序列从小到大排,这样a最大的对b最小的,a次大的对b次小的,最终结果最小。
举个例子:
a和b放在同一个结构体中,相当于ai和bi捆绑在一起
a | 8 | 7 | 4 | 5 |
b | 8 | 7 | 5 | 4 |
将b序列从小达到排
a | 5 | 4 | 7 | 8 |
b | 4 | 5 | 7 | 8 |
令b[i]=i,i从0开始
a | 5 | 4 | 7 | 8 |
b(记为b1) | 0 | 1 | 2 | 3 |
将a序列从大到小排列
a | 8 | 7 | 5 | 4 |
b(记为b2) | 3 | 2 | 0 | 1 |
这样就实现的了a从大到小排,b从小到大排,最后只需要找出b1->b2需要交换多少次数才能实现
观察最终的b2,依次遍历(0≤t<n),设置访问标记数组vis[],计数器值增加的条件为(b2[i]!=i || !vis[i] || !vis[b2[i]])
遍历到t=0时,
b2[0]=3,不等于0,跳到i=3的位置;b2[3]=1,不等于0,跳到i=1的位置;b2[1]=2,不等于0,跳到i=2的位置;b2[2]=0结束;并将这期间访问的所以b值设为已经访问,没跳一次计数器都要加1
在依次遍历其他的值,最后输出计数器的结果
可以看出,从b1变换到b2跳转的情况实际上就是遍历过程中跳转情况的逆序,所以遍历过程中每跳转一次则表明b1->b2有一次交换,计数器+1
ac代码:
#include <iostream>
#include <algorithm>
#include <string.h>
#include <ctype.h>
#include <set>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <sstream>
#define maxn 100005
using namespace std;
typedef long long ll;
struct node{ll a,b;
}s[maxn];
ll n,ans=0,vis[maxn]={0};
bool cmpa(node s1,node s2)
{return s1.a>s2.a;
}
bool cmpb(node s1,node s2)
{return s1.b<s2.b;
}
int main()
{//freopen("/Users/zhangkanqi/Desktop/11.txt","r",stdin);scanf("%lld",&n);for(ll i=0;i<n;i++)scanf("%lld",&s[i].a);for(ll i=0;i<n;i++)scanf("%lld",&s[i].b);sort(s,s+n,cmpb);for(ll i=0;i<n;i++)s[i].b=i;sort(s,s+n,cmpa);for(ll i=0;i<n;i++){if(s[i].b==i || vis[i] || vis[s[i].b])continue;ll now=s[i].b;do{ans++;vis[now]=1;now=s[now].b;vis[now]=1;}while(now!=i);}printf("%lld",ans);return 0;
}
【“新智认知”杯上海大学联赛】E-CSL的魔法(序列b到序列b‘需要的数据交换次数)相关推荐
- “新智认知”杯上海高校程序设计竞赛暨第十七届上海大学程序设计春季联赛 B.CSL 的英语考试
CSL 的英语考试 CSL 为了备战即将到来的六级考试,在外面报了一个英语培训班.经过了一学期的学习后,英语老师决定要对 CSL 的学习成果进行检测.老师准备了一份卷子,考虑到 CSL 的英语水平,卷 ...
- “新智认知”杯上海高校程序设计竞赛暨第十七届上海大学程序设计春季联赛----G-CSL的训练计划
首先发出题目链接: 链接:https://ac.nowcoder.com/acm/contest/551/F 来源:牛客网 涉及:有向图 题目如下: 题目意思(表示我太chun,读了几遍才勉强明白了题 ...
- 智源杯天文数据算法挑战赛开赛,前沿AI技术助力天文科学研究
由北京智源人工智能研究院主办,国家天文台.数据评测平台biendata联合举办的天体分类数据竞赛于2020年1月开赛.本次比赛旨在鼓励大众参与到天文学的探索当中,利用最新的人工智能算法分析望远镜收集到 ...
- 蓝驰创投朱天宇:用10年尺度看 AI 创业,如何发现独角兽 | 新智元专访
2017年1月20日,新智元百人会闭门论坛,蓝驰创投管理合伙人朱天宇从投资人的角度,带来<用10年的尺度看AI 创业,对下一个创新周期思考>的主题分享. 在分享开始前,朱天宇拿出了一本&l ...
- 中国AI行业走向:新人胜旧人还是 BAT 牢牢掌握价值链顶端? | 新智元投资领袖论坛...
2017年3月27日,在新智元开源·技术峰会的AI 投资领袖论坛,在北京大学人工智能创新中心主任雷鸣的支持下,红杉资本中国基金合伙人计越:高瓴资本集团合伙人洪婧:蓝驰创投管理合伙人朱天宇:中科招商集团 ...
- 新智元【Yoshua Bengio 亲自解答】机器学习 81 个问题及答案(最全收录)
原文地址:http://valser.org/thread-828-1-1.html 新智元编译1 来源:Quora 译者:张巨岩 王婉婷 李宏菲 戴秋池 这是 Quora 的最新节目,针对特定 ...
- 徐立:1200层神经网络夺冠ImageNet,深度学习越深越好?| 新智元 AI 领军人物专访...
人工智能领域的创业浪潮中,计算机视觉技术(CV)可以说是一个较为火热的方向,呈遍地开花之势.在这片江湖中,有四家公司特别突出,有 CV 领域的"一桶筐汤" 之称,可以看成是具有巨大 ...
- 第八届育才杯机器人比赛_疫情防控常态化,传统赛事新转型 “育才杯”第九届青岛国际象棋学校锦标赛(网络)顺利举办...
原标题:疫情防控常态化,传统赛事新转型 "育才杯"第九届青岛国际象棋学校锦标赛(网络)顺利举办 "育才杯"青岛市国际象棋学校锦标赛是一项传统赛事,去年举办了第八 ...
- DeepMind哈萨比斯对话哈里王子:2018年AI最大的突破在生物或化学 2017-12-29 新智元 新智元报道 编辑:刘小芹 胡祥杰 【新智元导读】BBC 电台第四台连续第14年在
DeepMind哈萨比斯对话哈里王子:2018年AI最大的突破在生物或化学 2017-12-29新智元 新智元报道 编辑:刘小芹 胡祥杰 [新智元导读]BBC 电台第四台连续第14年在圣诞和新年之间 ...
- 【深度学习看手相】台湾学生获奖 AI 项目是科学还是伪科学? 搜狐科技 08-06 12:44 1新智元报道 来源: medium,facebook 编译:胡祥杰 张易 【新智元导读】本周日带来一个有
[深度学习看手相]台湾学生获奖 AI 项目是科学还是伪科学? 搜狐科技 08-06 12:44 1新智元报道 来源: medium,facebook 编译:胡祥杰 张易 [新智元导读]本周日带来一个有 ...
最新文章
- 局部敏感哈希算法(Locality Sensitive Hashing)
- 华为云专家向宇:工欲善其事必先利其器,才能做数据的“管家”
- 遍历字典_十三、Python字典三种遍历方法
- java 多线程 实例浅析
- 阿里Q2财报:阿里云势头猛进领跑全球
- T-SQL 之 DDL语法
- 58-20210406华为海思Hi3516DV300的linux系统下获取IMX335的视频(eMMC模式)
- 中科微GPS模块使用教程 ATGM332D ATGM336H GSP模块 单片机程序 C程序
- 信息系统分析与设计(第四版)期末复习提纲
- 数学建模overleaf模板_数学建模论文模板及套路
- Docker 教程:如何将Helix QAC作为容器创建并运行 上
- 从零开始的泡泡龙游戏
- Java的Abstraction抽象类/方法-笔记
- PyTorch基础:数据处理(数据加载、GPU加速)
- Jett+Spring MVC实现Excel导出
- java jsoup解析开彩网api接口json数据实例
- 1.4 计算机网络的定义和分类
- 关于十六进制、asc码
- 【我的生活】旅游计划--2019
- qt textbrowser 设置字体颜色
热门文章
- linux vi只写入1个字节,关于linux命令的说明(这是一个命令集)
- 详解 undefined 与 null 的区别
- java 各种数据结构,几种常见的数据结构的JAVA实现
- matlab浪漫画图,Matlab技巧11:谁说数学人不懂浪漫——Matlab画隐函数曲面
- 断电MySQL起不来_急求mysql 断电后无法启动解决方法!!!!
- docker搭建python开发环境_PyCharm使用之利用Docker镜像搭建Python开发环境
- a卡 n卡 html5性能,实测说明,A卡N卡测试平台
- linux的mysql不允许连接_linux下允许mysql远程连接
- string.format的使用与及转义
- mqtt协议-broker之moqutte源码研究二之Connect报文处理