蒟蒻25分求助!求大佬帮助
查看原帖
蒟蒻25分求助!求大佬帮助
224443
pp_orange楼主2020/7/23 12:34

测试点2正确,其余测试点错误,都有少量偏差

#include<iostream>
//#include<cmatn>
//#include<string>
//#include<algorithm>
//#include<>
#define MAX 10
#define f(a,b,c) for(register int a=b;a<c;a++)
using namespace std;
double s,mc,cpd;
double c=0;
int n;
double ds[MAX],ps[MAX];
double maxs;
double ans=0;
int minp;
double round(double num)
{
	num=((int)(num*100+0.5))/100.00;
	return num;
}
int main()
{
	ios::sync_with_stdio(false);
	//cout<<round(10.4559)<<','<<round(5.0021)<<endl;
	cin>>s>>mc>>cpd>>ps[0]>>n;
	ds[0]=0;
	maxs=mc*cpd;
	f(i,1,n+1)
	{
		cin>>ds[i]>>ps[i];
	}
	f(i,0,n+1)
	{
		if(i)
		{
			c-=((ds[i]-ds[i-1])/cpd);
		}
		minp=0;
		if(maxs<ds[i+1]-ds[i])
		{
			cout<<"No Solution"<<endl;
			return 0;
		}
		f(j,i+1,n)
		{
			if(ds[j]-ds[i]>maxs)
			{
				break;
			}
			if(ps[j]<ps[i]&&ds[j]-ds[i]<=maxs)
			{
				minp=j;
			}
		}
		if(minp)
		{
			if(((ds[minp]-ds[i])/cpd-c)>0)
			{
				ans+=((ds[minp]-ds[i])/cpd-c)*ps[i];
				c=(ds[minp]-ds[i])/cpd;
			}
			i=minp-1;
		}
		else
		{
			if(s-ds[i]>maxs)
			{
				ans+=(mc-c)*ps[i];
				c=mc;
			}
			else
			{
				if(((s-ds[i])/cpd-c)>0)
				{
					ans+=((s-ds[i])/cpd-c)*ps[i];
					c=(s-ds[i])/cpd;
				}
			}
		}
	}
	cout<<round(ans);
	return 0;
}
2020/7/23 12:34
加载中...