80pts求调
查看原帖
80pts求调
801391
_czx_楼主2024/4/13 09:11

orz (#7 #8WA)

#include<iostream>
#include<algorithm>
using namespace std;
int n;
long long ans;
int b[40000];
struct list{
    int nexts = 0,last = 0,id = 0,x = 0;
}a[40000];
bool cmp(list a,list b){
    if(a.x!=b.x)return a.x<b.x;
    return a.id<b.id;
}
int main(){
    cin >> n;
    for(int i = 1;i<=n;i++){
        cin >> b[i];
        a[i].x = b[i];
        a[i].id = i;
    }
    sort(a+1,a+1+n,cmp);
    for(int i = 1;i<=n;i++){
        a[i].nexts = i+1;
        a[i].last = i-1;
    }
    for(int i = n;i>=2;i--){
        for(int j = 1;j<=n;j++){
            if(a[j].id == i){
                if(a[a[j].nexts].x == 0) ans+=abs(a[j].x-a[a[j].last].x);
                else if(a[a[j].last].x == 0) ans+=abs(a[j].x-a[a[j].nexts].x);
                else ans+=min(abs(a[j].x - a[a[j].nexts].x),abs(a[j].x-a[a[j].last].x));
                a[a[j].nexts].last = a[j].last;
                a[a[j].last].nexts = a[j].nexts;
            }
        }
    }
    cout << ans+b[1];
    return 0;
}
2024/4/13 09:11
加载中...