首页 > 其他分享 >Educational Codeforces Round 127 D

Educational Codeforces Round 127 D

时间:2022-10-13 16:56:16浏览次数:48  
标签:Educational const int mn Codeforces ans 127 INF mx

D. Insert a Progression

显然我们可以对a1——a2之间的数全部都插入期间 显然是没有贡献的
并且我们我们的1-x 只用维护最小1 和 最大x 即可
显然要是我们要是mn中没有1 我们要让1插进去
当插头尾的时候只有一边贡献 中间就会有左右两边贡献
这样我们处理了1 我们再判断mx是不是大于x再看做不做x
这样就会少一个特判n==1
显然我们做x 做1的顺序是无关的

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5+10;
const int M = 998244353;
const int mod = 998244353;
#define int long long
int up(int a,int b){return a<0?a/b:(a+b-1)/b;}
#define endl '\n'
#define all(x) (x).begin(),(x).end()
#define YES cout<<"YES"<<endl;
#define NO cout<<"NO"<<endl;
#define _ 0
#define pi acos(-1)
#define INF 0x3f3f3f3f3f3f3f3f
#define fast ios::sync_with_stdio(false);cin.tie(nullptr);

void solve() {
    int n,x;cin>>n>>x;
    vector<int>a(n+1);
    int mx=-INF,mn=INF,sum=0;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        if(i>1)sum+=abs(a[i]-a[i-1]);
        mx=max(mx,a[i]);
        mn=min(mn,a[i]);
    }
    int ans=INF;
    if(mn>=1){
        ans=min({ans,abs(a[1]-1),abs(a[n]-1)});
        for(int i=2;i<=n;i++){
            ans=min(ans,min(abs(a[i-1]-1),abs(a[i]-1))*2);
        }
    }
    sum+=ans;
    ans=INF;
    if(mx>=x){
        cout<<sum<<endl;return;
    }
    ans=min({ans,abs(a[1]-x),abs(a[n]-x)});
    for(int i=2;i<=n;i++){
        ans=min(ans,min(abs(a[i-1]-x),abs(a[i]-x))*2);
    }
    cout<<sum+ans<<endl;
}
signed main(){
    fast
    int t;t=1;cin>>t;
    while(t--) {
        solve();
    }
    return ~~(0^_^0);
}

标签:Educational,const,int,mn,Codeforces,ans,127,INF,mx
From: https://www.cnblogs.com/ycllz/p/16788728.html

相关文章

  • Codeforces Round #787 F
    F.VladandUnfinishedBusiness和一般的求多个点都到达的最小距离不同这里规定了终点这样我们首先x-y这条链可以确定当然我们这条链可以通过让path[y]等于1因为树中......
  • Codeforces Round #721 C
    C.SequencePairWeight我们发现不管是分组内计算或者是暴力都是不可取的我们思考反想一对相同数能够有算进多少种方式显然是i*(n-i+1)的组合数显然要是有第三个相同......
  • Codeforces Round #826 (Div. 3)
    F.Multi-ColoredSegments观察:如果某个位置上有大于等于两种不同的颜色,这个位置就可以更新任何颜色的线段的答案。基于观察就可以通过模拟来解决问题了。大概就是先离......
  • Codeforces Round #826 (Div. 3) F // 线段树
    题目来源:CodeforcesRound#826(Div.3)F题目链接:F.Multi-ColoredSegments题意给定\(n\)条有颜色的线段(\(l_i,r_i,c_i\)),对于每条线段,求:距离该线段最近,且颜色不同的......
  • *Educational Codeforces Round 87 (Rated for Div. 2) C1. Simple Polygon Embedding
    https://codeforces.com/problemset/problem/1354/C1题目大意:给定一个数字n,表示构建出一个大小为2*n的边长的多边形;问我们可以装下这个多边形的最小的正方形的边长是......
  • CodeForces Round #826 (Div.3) 康复训练
    A模拟题,不多说。时间复杂度\(O(3)\)#include<iostream>#include<cstdio>#include<cstring>#include<map>constcharch[]={'L','M','S'};std::strings[2];s......
  • Codeforces Round #825 (Div. 2)D. Equal Binary Subsequences
    CodeforcesRound#825(Div.2)D.EqualBinarySubsequences题意:给定一个长度为2n的01字符串s。你可以对其中一个子序列进行向右旋转一个位置。问能否将字符串分割成......
  • Codeforces1736C2. Good Subarrays (Hard Version)
    Codeforces1736C2.GoodSubarrays(HardVersion)题解:记\(ans[i]\)为以\(i\)为结尾最长的好的数列长度观察发现,以\(i\)为结尾的好的数列,长度可以是\(1,2,3,...,......
  • Codeforces Round #825 (Div. 2)
    CodeforcesRound#825(Div.2)\(A\)3min#include<bits/stdc++.h>usingnamespacestd;inta[105],b[105];intmain(){ intt;cin>>t; while(t--){ intn;cin>>......
  • codeforces 305B. Continued Fractions (递归的思想)
    ​​http://codeforces.com/problemset/problem/305/B​​大致题意:问是否等于开始直接用浮点递归处理。。。结果可想而知。再一次出现运行结果不一样的问题:对于数据......