传送门
题面描述:
一个人和他的教练一起爬山,教练速度比人快。山上有一些美味的草,教练想边爬山边吃这些美味的草(人吃草可还行),但是教练如果落后于人,那么那个人就会没有动力不再继续爬山,所以要求教练在保证每时每刻都不落后于人的基础上尽可能多的吃美味的草。
题目分析:
贪心问题,教练在保证领先于人的基础上每次走到美味值最大的草,待到人追上来与教练同一高度时再找下一个美味值最大的草。注意一下题目给的单位是秒每米,数据要开long long不然会溢出。
代码:
#include<algorithm>
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<queue>
#include<vector>
using namespace std;
long long i,l,n,rf,rb,now=0;
long long ans=0;
struct node{
long long x,c;
}a[100005];
bool cmp(node a,node b){
return a.c>b.c;
}
int main(){
cin>>l>>n>>rf>>rb;
for(i=0;i<n;i++) cin>>a[i].x>>a[i].c;
sort(a,a+n,cmp);
for(i=0;i<n;i++){
if(now<a[i].x) ans+=(rf-rb)*(a[i].x-now)*a[i].c,now=a[i].x;//上面如果用int这里即使ans是long long右边也会溢出
}
cout<<ans;
}