1 条题解
- 
  2
#include<queue> #include<math.h> #include<stdio.h> #include<iostream> #include<vector> #include<iomanip> #include<string.h> #include<algorithm> #include<cmath> #include<cstdio> #include<utility> #include<cstring> #include<stack> #include<fstream> #include<string> using namespace std; #define LL long long const int N = 1e4 + 10; const int INF = 0x3f3f3f3f; double maxx,mo=0,d2,temlen=0,d1,c,p; int n; struct add { double co; double dis; }pl[10000]; int move(int now) { int can=99999; int f=pl[now].dis; for(int i=now+1;i<=n&&pl[i].dis-f<=maxx;i++) { if(pl[i].co<pl[now].co) { mo+=((pl[i].dis-f-temlen)/d2)*pl[now].co; temlen=0; return i; } if(can==99999||pl[i].co<pl[can].co)can=i; } if(d1-pl[now].dis<=maxx) { mo+=((d1-pl[now].dis-temlen)/d2)*pl[now].co; return 9999; } if(can==99999) { cout<<"No Solution"; return -1; } else { mo+=c*pl[now].co; temlen+=(maxx-pl[can].dis+f); return can; } } int cmp(add a,add b) { return a.dis<b.dis; } int main() { cin>>d1>>c>>d2>>p>>n; pl[0].dis=0; pl[0].co=p; for(int i=1;i<=n;i++)cin>>pl[i].dis>>pl[i].co; sort(pl,pl+n,cmp); maxx=c*d2; int k=0,t; do { t=move(k); k=t; if(t==-1)return 0; }while(t!=9999); printf("%.2f",mo); return 0; } 
- 1
 
信息
- ID
 - 640
 - 时间
 - 1000ms
 - 内存
 - 256MiB
 - 难度
 - 10
 - 标签
 - 递交数
 - 4
 - 已通过
 - 1
 - 上传者