【牛客 - 551E】CSL 的魔法(贪心,思维,STLmap,分块)

题干:

链接: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。

输入数据保证每个序列里的数两两不同。

 

2≤n≤1052≤n≤105
1≤ai,bi≤1091≤ai,bi≤109

输出描述:

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

示例1

输入

复制

2
1 2
1 2

输出

复制

1

示例2

输入

复制

2
1 2
2 1

输出

复制

0

解题报告:

  首先通过贪心不难证明,当两个数组分别是最大值和最小值匹配的时候,这样刚好达到最小值。所以就是怎么通过最小步数让a数组可以从大到小排列就可以了。

  那么后面这一步的实现方法就很多了。该AC代码只是提供了一种方式。还可以用离散数学中置换群的概念来理解(如果没记错应该是叫这个),大概一堆概念什么对换变换置换一类操作,,具体忘记了,总之就是可以得出一堆环来,每个环之间的数一次替换就可以排列好,也就是分成若干个块,块间不影响。。(因为你换一次操作至少能对齐一个吧,就是你换走的这个。当然如果巧合,换过来的这个刚好就是你需要的,那就完美了,对于这个块的操作就结束了)。对于上述步骤,可以利用该思想暴力,也可以直接算出这个块中有多少数字,假设涉及x个数字,然后直接(x-1)就是答案。。又因为总块数是n,那么换句话说,只需要数出有多少个块cnt,然后n-cnt就是答案。

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
const int MAX = 2e5 + 5;
int a[MAX],b[MAX],aa[MAX],bb[MAX];
map<int,int> mp,mb;//mb存b数组每个数字的位置。  mp存本应该在的位置 
int main()
{int n;cin>>n;for(int i = 1; i<=n; i++) cin>>a[i],aa[i] = a[i];for(int i = 1; i<=n; i++) cin>>b[i],mb[b[i]] = i;sort(aa+1,aa+n+1);sort(b+1,b+n+1,greater<int>());for(int i = 1; i<=n; i++) mp[aa[i]] = mb[b[i]];int ans = 0;for(int i = 1; i<=n; i++) {while(mp[a[i]]!=i) swap(a[i],a[mp[a[i]]]),ans++;}printf("%d\n",ans);return 0 ;
}

AC代码2:(分块的方法,省掉了map,跑的飞快) 

#include <bits/stdc++.h>
using namespace std;typedef pair<int, int> pii;
#define ff first
#define ss second
#define mp make_pairint main() {ios::sync_with_stdio(false);cin.tie(nullptr);int n;cin >> n;vector<pii> ab(n);vector<int> next(n);vector<bool> vis(n, false);for (int i = 0; i != n; ++i) cin >> ab[i].ff;for (int i = 0; i != n; ++i) cin >> ab[i].ss;sort(ab.begin(), ab.end());for (int i = 0; i != n; ++i) ab[i].ff = i;//映射到新值1~n内sort(ab.begin(), ab.end(), [] (const pii& x, const pii& y) { return x.ss > y.ss; });for (int i = 0; i != n; ++i) next[i] = ab[i].ff;int res = 0;for (int i = 0; i != n; ++i) if (!vis[i]) {++res;while (!vis[i]) {vis[i] = true;i = next[i];}}cout << n - res << endl;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/440511.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java调用cplex案例_【CPLEX教程03】java调用cplex求解一个TSP问题模型

前面我们已经搭建好cplex的java环境了&#xff0c;相信大家已经跃跃欲试&#xff0c;想动手写几个模型了。今天就来拿一个TSP的问题模型来给大家演示一下吧~CPLEX系列教程可以关注我们的公众号哦&#xff01;获取更多精彩消息&#xff01;01 TSP寤烘ā关于TSP建模&#xff0c;就…

【牛客 - 551C】CSL 的密码(后缀数组,后缀自动机,随机算法)

题干&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/551/C 来源&#xff1a;牛客网 为了改变这一点&#xff0c;他决定重新设定一个密码。于是他随机生成了一个很长很长的字符串&#xff0c;并打算选择一个子串作为新密码。他认为安全的密码长度至少为…

java在一个类里实现存款_用Java编写一个简单的存款

package desposit.money;public class DespositMoney {public static void main(String[] args) {Customer c1 new Customer("第一个顾客",3);Customer c2 new Customer("第二个顾客",10);Customer c3 new Customer("第三个顾客",5);c1.start…

【牛客 - 551G】CSL的训练计划(二分 + 拓扑排序 + 优化卡常)

题干&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/551/G 来源&#xff1a;牛客网 题目描述 众所周知&#xff0c;CSL 是一个负责的集训队队长。为了让集训队的学弟们训练更加饱和&#xff0c;他根据每个人的能力&#xff0c;提出了 m 个题数要求。假如…

java 自动启动监听_Spring Boot 启动事件和监听器,太强大了!

大家都知道&#xff0c;在 Spring 框架中事件和监听无处不在&#xff0c;打通了 Spring 框架的任督二脉&#xff0c;事件和监听也是 Spring 框架必学的核心知识之一。一般来说&#xff0c;我们很少会使用到应用程序事件&#xff0c;但我们也不要忘了它们的存在&#xff0c;比如…

【Gym - 101196F】Removal Game (环形区间dp,环状,细节优化)

题干&#xff1a; 健健开发了一个游戏叫做<<者护守形隐>>&#xff0c;里面有一个情节是这样的&#xff0c;女主子纯藤武被坏人关在了密室里&#xff0c;作为男主的肖健当然要英雄救美。但是要打开密室的门&#xff0c;必须解开一道谜题。 门上有几个数字围成的一个…

java day_Java_Day7(上)

Java learning_Day7(上)内容常用类枚举类型常用类String 类java.lang.String 类代表不可变的字符序列。String 类的常见构造方法&#xff1a;String(String original)创建一个 String 对象为 original 的拷贝。String(char[] value)用一个字符数组创建一个 String 对象。String…

【FZU - 2202】犯罪嫌疑人(思维,假装建图,分类讨论)

题干&#xff1a; 福尔摩斯是个大侦探&#xff0c;他总是在解决疑难案件。这一次的案件也不例外&#xff0c;案件是这样的&#xff1a;有编号为1到N的N位嫌疑犯&#xff0c;他们其中有一个犯了罪&#xff0c;然后每个嫌疑犯都被询问,“哪一个人犯了罪&#xff1f;”犯罪嫌疑人…

java关键字 valotile_Java内存模型-jsr133规范介绍,java中volatile关键字的含义

最近在看《深入理解Java虚拟机&#xff1a;JVM高级特性与最佳实践》讲到了线程相关的细节知识&#xff0c;里面讲述了关于java内存模型&#xff0c;也就是jsr 133定义的规范。系统的看了jsr 133规范的前面几个章节的内容&#xff0c;觉得受益匪浅。废话不说&#xff0c;简要的介…

【HDU - 5050 】Divided Land (Java大数,大数进制转换,大数gcd)

题干&#xff1a; It’s time to fight the local despots and redistribute the land. There is a rectangular piece of land granted from the government, whose length and width are both in binary form. As the mayor, you must segment the land into multiple squar…

Java重载和重写6_深入理解Java中的重写和重载

深入理解Java中的重写和重载重载(Overloading)和重写(Overriding)是Java中两个比较重要的概念。但是对于新手来说也比较容易混淆。本文通过两个简单的例子说明了他们之间的区别。定义重载简单说&#xff0c;就是函数或者方法有同样的名称&#xff0c;但是参数列表不相同的情形&…

【Gym - 101608G】WiFi Password (区间或,线段树 或 按位处理+尺取 或 二分)

题干&#xff1a; Just days before the JCPC, your internet service went down. You decided to continue your training at the ACM club at your university. Sadly, you discovered that they have changed the WiFi password. On the router, the following question wa…

java框架讲解ppt_经典框架spring介绍课件.ppt

Wepull Information Service Spring-javaEE的春天 预习检查 根据你的理解&#xff0c;“依赖注入”是什么&#xff1f; 根据你的理解&#xff0c;谈谈“依赖注入”适于在项目中应用吗&#xff1f; 你理解的“面向方面编程(AOP)”是什么样的&#xff1f; Spring框架的内容和作用…

python 协程池gevent.pool_进程池\线程池,协程,gevent

目录1. 进程池与线程池2. 协程3. gevent4. 单线程下实现并发的套接字通信首先写一个基于多线程的套接字服务端:from socket import *from threading import Threaddef comunicate(conn):while True: # 通信循环try:data conn.recv(1024)if len(data) 0: breakconn.send(data.…

【ZOJ - 3963】Heap Partition (STLset,二叉树的性质,构造,贪心,思维)

题干&#xff1a; A sequence S {s1, s2, ..., sn} is called heapable if there exists a binary tree Twith n nodes such that every node is labelled with exactly one element from the sequence S, and for every non-root node si and its parent sj, sj ≤ si and j…

java poi 3.13_Java 读取Excl文件 (poi-3.13)

最近做项目遇到了读取Excel数据到数据库做数据的初始化。于是找一个。发现(poi-3.13)可以解决问题。可以解析两种格式(xlsx和xls)以下是实现的步骤1.下载poi3.13包&#xff0c;地址(http://poi.apache.org/download.html#POI-3.13)2.学习APi。接下来是还是demo来说明问题吧&…

【CodeChef - CLIQUED 】Bear and Clique Distances(建图,缩点技巧,思维)

题干&#xff1a; 解题报告&#xff1a; 主要就是在于怎么处理那个前K个点&#xff1a;组成一个团。换句话说&#xff0c;缩成一个点。先直接当成每个点多了k条边来处理&#xff0c;T了。想想也是啊&#xff0c;要是K1e5&#xff0c;那就是1e10条边了。。刚开始尝试了半天缩点&…

【HDU - 5649】DZY Loves Sorting(线段树,区间更新区间查询,思维,01缩数变换,线段树分割)

题干&#xff1a; DZY has a sequence a[1..n]a[1..n]. It is a permutation of integers 1∼n1∼n. Now he wants to perform two types of operations: 0lr0lr: Sort a[l..r]a[l..r] in increasing order. 1lr1lr: Sort a[l..r]a[l..r] in decreasing order. After doin…

php错误403_phpstudy访问文件报错403/Forbidden解决办法

使用phpstudy访问WWW目录下的文件时&#xff0c;浏览器提示Forbidden错误&#xff0c;没有访问权限。我在网上搜索了喝多资料以及本人亲自尝试过后&#xff0c;总结了一下两种方法。方法一&#xff1a;打开phpStudy&#xff0c;点击按键“其他选项菜单”>找到phpStudy配置&g…

【CodeForces - 294B】Shaass and Bookshelf(枚举,贪心,思维,组内贪心组间dp)

题干&#xff1a; Shaass has n books. He wants to make a bookshelf for all his books. He wants the bookshelfs dimensions to be as small as possible. The thickness of the i-th book is ti and its pages width is equal to wi. The thickness of each book is eith…