求助! 75分 最后一个点输出192.32
查看原帖
求助! 75分 最后一个点输出192.32
327069
Lqwq楼主2021/10/10 21:24
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <string>
#include <cstring>
using namespace std;

struct lwt
{
	double d;//lu
	double p;//qian
}a[11];

bool cmp(lwt a,lwt b)
{
	return a.p<b.p;
}
double d1,c,d2,p,now,lastmon,maxn,mon;
int n;
bool flag;

int main()
{
	
	scanf("%lf%lf%lf%lf",&d1,&c,&d2,&p);
	scanf("%d",&n);
	
	for(int i=1;i<=n;i++)
	scanf("%lf%lf",&a[i].d,&a[i].p);
	
	maxn=c*d2;
	for(int i=1;i<=n;i++)
	{
		if(a[i].d-a[i-1].d>maxn)
		{
			printf("No Solution");
			return 0;
		}
	}
	sort(a+1,a+n+1,cmp);
	
	now=0;
	lastmon=p;
	while(1)
	{
		flag=true;
		for(int i=1;i<=n;i++)
		{
			if((a[i].d-now)<=maxn&&(a[i].d-now)>0)
			{
				flag=false;
				if(a[i].d<=d1)
				{
					mon=mon+(a[i].d-now)/d2*lastmon;
					now=a[i].d;
					lastmon=a[i].p;
				}
				else
				{
					mon=mon+(a[i].d-d1)/d2*lastmon;
					now=d1;
					lastmon=a[i].d;
				}
			}
			
			if(now+maxn>=d1)
			{
				mon+=(d1-now)/d2*lastmon;
				now=d1;
			}
			
			if(now>=d1)
			{
				printf("%.2lf",mon);
				return 0;
			}
		}
		
		if(flag==true&&now<d1)
		{
			mon+=(d1-now)/d2*lastmon;
			now=d1;
		}
		
		if(now>=d1)
		{
			printf("%.2lf",mon);
			return 0;
		}
		
	}
	
	
	return 0;
}
2021/10/10 21:24
加载中...