首页 > 其他分享 >CF1898 D Absolute Beauty 题解

CF1898 D Absolute Beauty 题解

时间:2023-11-20 23:34:37浏览次数:35  
标签:ch Beauty int 题解 LL ret 端点 CF1898

Link

CF1898 D Absolute Beauty

Question

给出两个长度都为 \(n\) 的数组 \(a,b\) ,我们可以任意选择两个数 \(i,j\) 交换 \(b_i\) 和 \(b_j\) 一次,或者不换

求 \(\sum\limits_{i=1}^n |a_i-b_i|\) 的最大值

Solution

把一个 \(a_i,b_i\) 抽象成一条线段

image.png

而交换 \(b\) 的操作可以视为交换两个线段的端点

我们发现了一个有趣的性质,就是 \(a_i,b_i\) 可以任意表示左端点或右端点,也就是说,\(a_i,b_i\) 可以随意调换,对这个题的答案没有影响

通过图片可以观察出,第二种情况下,覆盖长度增加了两倍中间的值,也就是说,我们只需要找到最小的右端点和最大的左端点,交换他们就是答案

Code

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn=2e5+5;
const LL INF=1ll<<60;
inline int read(){
    int ret=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-f;ch=getchar();}
    while(ch<='9'&&ch>='0')ret=ret*10+ch-'0',ch=getchar();
    return ret*f;
}
struct Line{
    LL L,R;
}L[maxn];
inline void solve(){
    int N=read();
    LL ans=0;
    for(int i=1;i<=N;i++) L[i].L=read();
    for(int i=1;i<=N;i++) L[i].R=read();
    for(int i=1;i<=N;i++) {
        if(L[i].L>L[i].R) swap(L[i].L,L[i].R);
        ans+=L[i].R-L[i].L;
    }
    LL MaxL=-INF,MinR=INF;
    for(int i=1;i<=N;i++){
        MaxL=max(MaxL,L[i].L);
        MinR=min(MinR,L[i].R);
    }
    printf("%lld\n",ans+max((MaxL-MinR)*2,0ll));
    return ;
}
int main(){
    // freopen("D.in","r",stdin);
    // freopen("D.out","w",stdout);
    int T=read();
    while(T--)solve();
    return 0;
}

Summary

  • 对于绝对值函数,可以抽象成线段

标签:ch,Beauty,int,题解,LL,ret,端点,CF1898
From: https://www.cnblogs.com/martian148/p/17845196.html

相关文章

  • 【题解】JLOI2016 - 成绩比较
    【题解】JLOI2016-成绩比较https://loj.ac/p/2026是我会的题,所以感觉难度不如noipT3T4。设\(f_{i,j}\)表示考虑到前\(i\)门课,有\(j\)人被B碾压。转移,设这轮中有\(k\)个原本被碾压的人不再被碾压,则相当于从\(f_{i-1,j+k}\)转移到\(f_{i,j}\)。考虑转移系数,首......
  • [题解]CF1899D Yarik and Musical Notes
    思路暴力化简公式题。假定\(b_{i}^{b_j}=b_{j}^{b_{i}}\)成立,那么有:\[2^{a_i\times2^{a_j}}=2^{a_j\times2^{a_i}}\\a_i\times2^{a_j}=a_j\times2^{a_i}\\\frac{a_i}{a_j}=\frac{2^{a_i}}{2^{a_j}}\\\frac{a_i}{a_j}=2^{a_i-a_j}\]因为\(\fra......
  • CF1898 C Colorful Grid 题解
    LinkCF1898CColorfulGridQuestion给出一个\(N\timesM\)的网格图给每一条边染色(R/B),需要存在一条长度为\(K\)的路径从\((1,1)\)到\((N,M)\),路径允许重复通过一个节点。Solution非常有意思的一道题先考虑\(K\)满足的最小值,显然是\((N-1)+(M-1)\),假设走上->......
  • CF1898 B Milena and Admirer 题解
    LinkCF1898BMilenaandAdmirerQuestion给出一个长度为\(n\)的序列\(a\),我们可以做一种操作使得\(a\)非降,操作是:对于一个\(a_i\)选择一个整数\(0\lex\lea_i\),用两个数\(x,(a_i-x)\)来替换\(a_i\)。求最小操作次数。Solution考虑哪些数是需要操作的,如......
  • CF1899 G Unusual Entertainment 题解
    LinkCF1899GUnusualEntertainmentQuestion给出一个排列\(p_i\)和一棵树,给出\(Q\)组询问,每组询问\([L,R,x]\)表示求\(p_L\simp_R\)上是否存在\(p_i\)在\(x\)的字数上。Solution这道题确实是一个好题。我们先考虑一个问题,怎么样才能判断子树,我们给书上的每个......
  • Windows端口占用问题解决
    查询被占用的端口进程8080为端口号netstat-ano|findstr8080杀掉线程14816为进程号taskkill/f/t/im14816......
  • noip2023 题解(民间数据)
    P9868[NOIP2023]词典(民间)直接把每个串\(w_i\)都从大到小/从小到大排一下,记作\(a_i,b_i\)。如果\(b_i\)小于除了\(i\)之外的所有\(a_i\),说明可以,否则不行。求一个前后缀最大值即可。复杂度\(\mathcal{O}(26n+nm)\)。点击查看代码#include<bits/stdc++.h>usingname......
  • CF1898D - Absolute Beauty(绝对值)
    题目地址Solution考虑把\(|a_i-b_i|\)转化为数轴上的线段的一条线段,那么\(swap\)操作可以形象转化为下图(借用官方\(Editoral\))考虑最大的增加(第一张图的情况)即可。Summary学到了绝对值转线段,把指定操作形象化,数形结合(雾......
  • 【洛谷 P1125】[NOIP2008 提高组] 笨小猴 题解(字符串+映射+集合)
    [NOIP2008提高组]笨小猴题目描述笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!这种方法的具体描述如下:假设是单词中出现次数最多的字母的出现次数,是单词中出现次数最少的字母的出现次数,......
  • [ABC326C] Peak 题解
    题目链接题目思路这个问题要求找到一个半开区间,使得在这个区间内包含尽可能多的礼物。首先,我们需要将输入的礼物坐标按照从小到大的顺序进行排序。然后,我们可以使用双指针的方法来寻找最佳的区间。代码以下是代码解释:#include<bits/stdc++.h>usingnamespacestd;constint......