【数据结构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;
}

浙公网安备 33010602011771号