zoukankan      html  css  js  c++  java
  • 笔记

    //利用动态数组统计与i相邻的不相等的值;
    //每个值对答案的最大贡献是修改为与其相连的点的中间值; 
    #include<cstdio>
    #include<vector>
    #include<algorithm>
    #define ll long long
    using namespace std;
    int n,m;
    vector<int> f[100001];
    ll ans=0,be,af,zzz,a[100001];
    ll max(ll a,ll b){return a>b?a:b;}
    int cha(ll a,ll b){
        if(a>b) return  (a-b);
        else return (b-a);
    }
    int main(){
        freopen("note.in","r",stdin);
        freopen("note.out","w",stdout);
        scanf("%d%d",&n,&m);
        for(int i=1;i<=m;i++) scanf("%d",a+i);
        for(int i=1;i<=m;i++){
            if(i>1&&a[i]!=a[i-1]) f[a[i-1]].push_back(a[i]);
            if(i<m&&a[i]!=a[i+1]) f[a[i+1]].push_back(a[i]);
        }
        zzz=0;
        for(int i=2;i<=m;i++) zzz+=(ll)cha(a[i],a[i-1]);//修改前所有差值; 
        for(int i=1;i<=n;i++){
            if(!f[i].size()) continue;
            sort(f[i].begin(),f[i].end());
            ll y=f[i][f[i].size()/2];
            be=0,af=0;
            for(int j=0;j<f[i].size();j++){
                be+=(ll)cha(i,f[i][j]);     //累加修改前i和与i相邻的数的差值; 
                af+=(ll)cha(y,f[i][j]);     //修改后 
            }
            ans=max(ans,be-af);             //记录最大差值 
        }
        printf("%I64d
    ",zzz-ans);
        fclose(stdin);
        fclose(stdout);
        return 0;
    }
    View Code
  • 相关阅读:
    C# FileStream 文件复制
    DataSnap Server 客户端调用 异常
    抛出异常 exception
    RAD Tokyo 10.2.2
    delphi ios info.plist
    sql 日期格式
    sql server 2014登录账号
    sql server导入excel数据
    dev16 cxgrid 在DLL里报0地址错
    sql server 查看所有表记录数
  • 原文地址:https://www.cnblogs.com/qingang/p/6059295.html
Copyright © 2011-2022 走看看