答案一样但WA,哪位大佬帮我看一下怎么回事??
查看原帖
答案一样但WA,哪位大佬帮我看一下怎么回事??
684853
Dove_Pig楼主2022/7/7 09:12

第四个数据点WA,但数据点下下来运算答案都一样,就是不知道为什么WA

#include<bits/stdc++.h>
using namespace std;
long double d1,c,d2,p,maxn,ans,cp,q;
int n;
struct node{
	long double di,pi; 
}op[1000000];
bool cmp(node X,node Y)
{
	return X.di<Y.di;
}
void tan(int x){
	long double q=c*d2,minp=1e9;
	int j;
	for(int i=x+1;i<=n;i++){
		if(op[i].di-op[x].di>q){
			break;
		}
		if(op[i].pi<minp){
			minp=op[i].pi;
			j=i;
				
		}
	}
    if(op[x].pi<=op[j].pi&&op[x].di+q>=d1)  
	{
		ans+=((d1-op[x].di)/d2-cp)*op[x].pi;
		return;
	}
	if(op[x].pi<op[j].pi){
		ans+=(c-cp)*op[x].pi;
		cp=c-(op[j].di-op[x].di)/d2;
	}
	else{
		ans+=((op[j].di-op[x].di)/d2-cp)*op[x].pi;
		cp=0.0;
	}
	tan(j);
}
int main(){
	cin>>d1>>c>>d2>>p>>n;
	for(int i=1;i<=n;i++){
		cin>>op[i].di>>op[i].pi;}

	
    op[0].di=0,op[0].pi=p;
	q=c*d2;
	
	
	for(int i=1;i<=n+1;i++){
        maxn=max(maxn,op[i].di-op[i-1].di);
	}
	if(c*d2<maxn){
		cout<<"No Solution";
		return 0;
	}
	cp=0.0; 
	sort(op+1,op+n+1,cmp);
	tan(0);
	printf("%.2Lf",ans);
	return 0;
}
2022/7/7 09:12
加载中...