题目描述

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. Linux下安装Anaconda 并进行用户共享

    下载镜像 wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ Anaconda3-5.3.1-Linux-x86_64.sh 安装 ...

  2. mooc人大单元测试2

    1 单选(2分) 下列选项中不是关系数据库基本特征的是(  ). A. 不同的列应有不同的数据类型 B. 不同的列应有不同的列名 C. 与行的次序无关 D. 与列的次序无关 2 单选(2分) 关系代数 ...

  3. shellcode隐写到像素RGB免杀上线到CS

    利用把Shellcode隐写到图片像素RGB进行免杀上线到CS --by:chenw 0x01 前言 前几天跟一个朋友一起搞一个站的时候,发现那个站点开了很多杀软,使用CS的powershell马无法 ...

  4. 1075 PAT Judge

    The ranklist of PAT is generated from the status list, which shows the scores of the submissions. Th ...

  5. 修正js跳转

    var urls = new Array();urls["pc"] = "./hp"; //pcurls["sj"] = "./h ...

  6. php 数学函数bc的使用(浮点数计算)

    简介: 对于任意精度的数学,PHP提供了支持用字符串表示的任意大小和精度的数字的二进制计算,最多为2147483647-1(或0x7FFFFFFF-1). bcadd - 2个任意精度数字的加法计算 ...

  7. Thinkphp5助手函数和Thinkphp3的单字母函数对应参照表

  8. poj2186强联通(牛仰慕)

    题意:       有一群老牛,他们之间有m组敬仰关系,关系可以传递,a仰慕b,b仰慕c,那么a就仰慕c,现在问被所有老牛都仰慕 的有多少? 思路:       想想,是不是一个环中的老牛的关系都是一 ...

  9. 使用QT creator实现一个五子棋AI包括GUI实现(8K字超详细)

    五子棋AI实现 五子棋游戏介绍 五子棋的定义 五子棋是全国智力运动会竞技项目之一,是具有完整信息的.确定性的.轮流行动的.两个游戏者的零和游戏.因此,五子棋是一个博弈问题. 五子棋的玩法 五子棋有两种 ...

  10. java8中的Optional

    Optional类主要解决空指针异常NullPointerException.Optional 类(java.util.Optional)是一个容器类,代表一个值存在或不存在,原来用 null 表示一 ...