1 条题解
-
1
#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; }
信息
- ID
- 640
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 4
- 已通过
- 1
- 上传者