【数据结构1-1】线性表 P2234 [HNOI2002]营业额统计

题解

利用sort函数按照profit排序,就近寻找之前的营业额并计算插值,比较前后的得到较小解即可。

AC代码

#include<bits/stdc++.h>
using namespace std;

struct Node{
    int profit,day;
}a[32770];

bool cmp(const Node &a,const Node &b){
        return a.profit<b.profit;
}

inline int check(int id,int n){
    Node now=a[id];
    if(now.day==0) return now.profit;
    int s=id,t=id;
    int ss,st;
    while((--s)>=0){
        if(now.day>a[s].day){
            ss=abs(now.profit-a[s].profit);
            break;
        }
    }
    while((++t)<n){
        if(now.day>a[t].day){
            st=abs(now.profit-a[t].profit);
            break;
        }
    }
    if(s<0) return st;
    if(t>=n) return ss;
    return ss<st?ss:st;
}

int main(){
    int n,x;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>x;
        a[i].profit=x;
        a[i].day=i;
    }
    sort(a,a+n,cmp);
    int sum=0;
    for(int i=0;i<n;i++){
        sum+=check(i,n);
    }
    cout<<sum<<endl;
}
posted @ 2021-11-15 20:39  Diffelentor  阅读(107)  评论(0)    收藏  举报