题目描述

You are given 2 arrays a a a and b b b , both of size n n n . You can swap two elements in b b b at most once (or leave it as it is), and you are required to minimize the value $$\sum_{i}|a_{i}-b_{i}|. $$

Find the minimum possible value of this sum.

输入格式

The first line contains a single integer n n n ( 1≤n≤2⋅105 1 \le n \le 2 \cdot 10^5 1≤n≤2⋅105 ).

The second line contains n n n integers a1,a2,…,an a_1, a_2, \ldots, a_n a1​,a2​,…,an​ ( 1≤ai≤109 1 \le a_i \le {10^9} 1≤ai​≤109 ).

The third line contains n n n integers b1,b2,…,bn b_1, b_2, \ldots, b_n b1​,b2​,…,bn​ ( 1≤bi≤109 1 \le b_i \le {10^9} 1≤bi​≤109 ).

输出格式

Output the minimum value of ∑i∣ai−bi∣ \sum_{i}|a_{i}-b_{i}| ∑i​∣ai​−bi​∣ .

题意翻译

给定 nnn 和两个长度为 nnn 的数组 a,ba,ba,b,最多交换一次 bbb 中的两个位置的值(可以不交换)。

最小化 ∑i=1n∣ai−bi∣\sum_{i=1}^{n}|a_i-b_i|∑i=1n​∣ai​−bi​∣。

n≤2×105n \le 2\times10^5n≤2×105;ai,bi≤109a_i,b_i\le 10^9ai​,bi​≤109。

输入输出样例

输入 #1

5
5 4 3 2 1
1 2 3 4 5
输出 #1

4
输入 #2

2
1 3
4 2
输出 #2

2

说明/提示

In the first example, we can swap the first and fifth element in array b b b , so that it becomes [5,2,3,4,1] [ 5, 2, 3, 4, 1 ] [5,2,3,4,1] .

Therefore, the minimum possible value of this sum would be ∣5−5∣+∣4−2∣+∣3−3∣+∣2−4∣+∣1−1∣=4 |5-5| + |4-2| + |3-3| + |2-4| + |1-1| = 4 ∣5−5∣+∣4−2∣+∣3−3∣+∣2−4∣+∣1−1∣=4 .

In the second example, we can swap the first and second elements. So, our answer would be 2 2 2 .


题解

可以很容易的计算出 \(ans = \sum_{i=1}^n |a_i-b_i|\) 的值,但是我们需要交换一对,使得 ans 尽量小

假设交换   \(i,j\)   这两对,那么此时的答案应该为

\[ans - (|a_i-b_i| + |a_j-b_j|-|a_i-b_j|-|a_j-b_i|)
\]

要找的这两对应该满足

\[|a_i-b_i| + |a_j-b_j|>|a_i-b_j|+|a_j-b_i|
\]

而且前者越大越好,后者越小越好,题目就像是一道二维偏序一样,解决的思路就是先确定一维

看着这满屏的绝对值,自然而然地想到了距离,不妨自己画一下发现,当

\[a_i<b_j<b_i<a_j \\
b_j<a_i<a_j<b_i \\
a_i<b_j<a_j<b_i \\
b_j<a_i<b_i<a_j
\]

上述情况满足时上面的不等式才会成立(当然以上只有 \(a_i<b_i\) 的情况,还有四种情况,请读者自己思考)

这样就拥有了降维的理由,我们可以按照   \(b\)   排序,这样固定了右端点,根据上述推断可以造成贡献的有

\[|a_j-b_j| \\or\\|b_i-b_j|\\or\\|a_i-a_j|
\]

为了满足区间的要求,需要进一步转化为右端点\(\geq\)左端点

而根据贪心,固定右端点应该按照   \(b\)   升序排列,这样可以满足

\[j>i \\ and\\ b[i]>b[j]
\]

所以要计算的 \(|b_j-a_i|\) 由于 \(b_j\) 的确定,只要保留之前 \(a_i\) 的最小值就可以了

总体算法复杂度 \(O(NlogN)\) 为排序的时间

*以上思路请读者自己实现,下面的代码以固定左端点为基础实现的

const int N=3e5+5;

    int n, m, _;
int i, j, k;
ll a[N];
ll b[N];
struct Node
{
ll x, y;
bool operator<(Node o){
return x<o.x;
}
int tag;
Node(ll x = 0, ll y = 0, int tag = 0) : x(x), y(y), tag(tag){}
}p[N]; signed main()
{
//IOS;
while(~sd(n)){
ll ans = 0;
rep(i, 1, n) sll(a[i]);
rep(i, 1, n) sll(b[i]), ans += abs(a[i] - b[i]);
rep(i, 1, n){
if(a[i] <= b[i]) p[i] = Node(a[i], b[i], 0);
else p[i] = Node(b[i], a[i], 1);
}
sort(p + 1, p + 1 + n);
ll maxx = 0;
ll ed[2] = {0, 0};
rep(i, 1, n){
ed[p[i].tag] = max(ed[p[i].tag], p[i].y);
if(!ed[p[i].tag ^ 1]) continue;
if(p[i].x <= ed[p[i].tag ^ 1]){
if(p[i].y <= ed[p[i].tag ^ 1]){
maxx = max(maxx, p[i].y - p[i].x);
continue;
}
maxx = max(maxx, ed[p[i].tag ^ 1] - p[i].x);
}
}
pll(ans - maxx * 2);
}
//PAUSE;
return 0;
}

CF1513F Swapping Problem(模型转化)的更多相关文章

  1. tyvj P1209 - 拦截导弹 平面图最小割&&模型转化

    P1209 - 拦截导弹 From admin    Normal (OI)总时限:6s    内存限制:128MB    代码长度限制:64KB 背景 Background 实中编程者联盟为了培养技 ...

  2. 【2019雅礼集训】【可持久化线段树】【模型转化】D1T2Permutation

    目录 题意 输入格式 输出格式 思路 代码 题意 给定一个长度为n的序列A[],你需要确定一个长度为n的排列P[],定义当前排列的值为: \[\sum_{i=1}^{n}{A[i]P[i]}\] 现在 ...

  3. LOJ 3056 「HNOI2019」多边形——模型转化+树形DP

    题目:https://loj.ac/problem/3056 只会写暴搜.用哈希记忆化之类的. #include<cstdio> #include<cstring> #incl ...

  4. [bzoj4567][Scoi2016]背单词-Trie+贪心+模型转化

    Brief Description 给你N个互不相同的字符串,记\(S_i\)为第i个字符串,现在要求你指定N个串的出现顺序,我们用\(V_i\)表示第i个字符串是第几个出现的,则V为1到N的一个排列 ...

  5. Wannafly挑战赛26-F. msc的棋盘(模型转化+dp)及一类特殊的网络流问题

    题目链接 https://www.nowcoder.com/acm/contest/212/F 题解 我们先考虑如果已知了数组 \(\{a_i\}\) 和 \(\{b_i\}\),如何判断其是否合法. ...

  6. LOJ 2719 「NOI2018」冒泡排序——模型转化

    题目:https://loj.ac/problem/2719 首先要发现合法的充要条件是 | LDS | <=2 ! 因为有没用的步数,说明一个元素先往左移.又往右移(不会先往右移再往左移,因为 ...

  7. Allegro 反射仿真--IBIS模型转化

    一.IBIS模型的获取 a) 直接找芯片供应商 b) 从网上下载 i.到Google网站直接搜索某个型号的IBIS模型: ii. 到器件厂商的官方网站下载: iii.从专门提供IBIS模型的网站搜索下 ...

  8. 【AtCoder】【模型转化】【二分答案】Median Pyramid Hard(AGC006)

    题意: 给你一个排列,有2*n-1个元素,现在进行以下的操作: 每一次将a[i]替换成为a[i-1],a[i],a[i+1]三个数的中位数,并且所有的操作是同时进行的,也就是说这一次用于计算的a[], ...

  9. 【AtCoder】【模拟】【模型转化】Camel and Oases(AGC012)

    题意: 有一个骆驼,n个绿洲遍布在数轴上,第i个绿洲的坐标为x[i],保证x[i]单增.骆驼的驼峰有体积初始值V.当驼峰的体积变为v的时候,驼峰中至多只能够存储v L的水.骆驼希望走完所有的绿洲,并且 ...

随机推荐

  1. WPF之小米Logo超圆角的实现

    某些新闻:小米logo换新,程序员一行代码(border-radius:19px)实现,目前此行代码价值200万 某程序员内心:所以还是因为我代码写太少了,所以这200万才没有我的份吗? 这事儿也成功 ...

  2. OOP-面向对象(三)

    魔术方法的使用 # 使用 __new__ 创建单态模式 class Singleton(): __obj = None def __new__(cls, *args, **kwargs): if cl ...

  3. 今日浅谈循环 for与while

    昨天写的条件分支结构与今日写的循环是编程两个最基本的也非常重要的个结构 for循环 for循环可以从一个元组(tuple),列表(list),字典(dict),集合(set),字符串(string') ...

  4. G - G ZOJ - 2723 (素数打表+set)

    Prime Number Definition An integer greater than one is called a prime number if its only positive di ...

  5. 十步解决php utf-8编码

    以前说过如果JS文件不是UTF8会在IE有bug,所以JS代码也要用UTF-8.还有数据库也都要用UTF-8.php用UTF-8总结: php文件本身必须是UTF-8编码.不像Java会生成class ...

  6. IDS入侵检测系统

    目录 IDS入侵检测系统 入侵检测系统的作用 入侵检测系统功能 入侵检测系统的分类 入侵检测系统的架构 入侵检测工作过程 数据检测技术 误用检测 异常检测 IDS的部署 基于网络的IDS 基于主机的I ...

  7. 获取Shell后的操作

    对于Windows系统主机和Linux系统主机,获取Shell后的操作都不同. Windows 当我们通过对Web服务器进行渗透,拿到了该Web服务器的shell后,可以执行系统命令后,我们该如何操作 ...

  8. Win64 驱动内核编程-29.强制解锁文件

    强制解锁文件 强制解锁因其他进程占用而无法删除的文件. 1.调用 ZwQuerySystemInformation 的 16 功能号来枚举系统里的句柄 2.打开拥有此句柄的进程并把此句柄复制到自己的进 ...

  9. Intel汇编语言程序设计学习-第六章 条件处理-下

    6.6  应用:有限状态机 这个东西说了半天,感觉就是把逻辑弄得跟有向图一样,没看出来什么高端的东西,下面就整理下书上说的概念: 有限状态机(FSM,Finite-State Machine)是依据输 ...

  10. 用 vitePress 快速创建一个文档项目

    其实开发一个项目最需要的就是操作文档,文档的质量决定了项目的开发流程,开发规范等等. 对于前端框架来说,文档最友好的还是vue,不仅是中国人的框架,而且文档支持了中文.仔细查看 Vue 的官方文档,还 ...