这道提高组的题太难,萌新不知为何错误,求大佬帮助
查看原帖
这道提高组的题太难,萌新不知为何错误,求大佬帮助
181566
after_the_end楼主2020/5/6 13:13
#include<bits/stdc++.h>
using namespace std;
#define re register
double d1,c,d2,p,ans,maxn,minx,cnt;
int n,k,minn;
struct node{
	double d,p;
}t[10];
bool cmp(node x,node y){
	return x.d<y.d;
}
int main(){
	scanf("%lf%lf%lf%lf%d",&d1,&c,&d2,&t[0].p,&n);
	t[n+1].d=d1;t[0].d=0;
	d1=c*d2;
	for(re int i=1;i<=n;++i){
		scanf("%lf%lf",&t[i].d,&t[i].p);
	}
	sort(t+1,t+1+n,cmp);
	while(k!=n){
		int f=0;minn=0x3f3f3f3f;
		for(re int i=k+1;i<=n;++i){
			if(t[k].d+d1>=t[i].d){
				if(t[k].p>t[i].p){
					f=1;
					ans+=((t[i].d-t[k].d-cnt)/d2)*t[k].p;
					cnt=0;
					k=i;
					break;
				}
				else{
					if(minn==0x3f3f3f3f||t[minn].p>t[i].p){
						minn=i;
					}
				}
			}
			else break;
		}
		if(f!=1){
			if(t[k].d>=t[n+1].d-d1){
				ans+=(t[n+1].d-t[k].d-cnt)/d2*t[k].p;
				printf("%.2f",ans);
				return 0;
			}
			if(minn==0x3f3f3f3f){
				printf("No Sulution");
				return 0;
			}
			else{
				ans+=c*t[k].p;cnt+=d1-t[minn].d+t[k].d;
			}
		}
	}
	printf("%.2lf",ans);
	return 0;
}
2020/5/6 13:13
加载中...