蒟蒻求助,
查看原帖
蒟蒻求助,
481018
Dreames楼主2023/10/11 20:18
#include<bits/stdc++.h>
using namespace std;
struct stata{
	double Pi,Di;
}a[200];
int cmp(stata &x,stata &y){
	return x.Di<y.Di;
}
double D1,C,D2,P;int N;
int flag=0;
int Check(int S,int E,double Num){
	int retr=0,Smal;
	int Minn=-1000;
	for(int k=S;k<=E;k++){
		if(Minn<=a[k].Pi){
		Minn=a[k].Pi;
		Smal=k;
		}
	    if(a[k].Pi<=Num)
	    return k;
	}
	if(!retr){
		flag=1;//真 
		return Smal;
	}
} 
void Find(int Place,double Rest,double Money){
	if(a[Place].Di+C*D2<a[Place+1].Di){
		printf("No Solution");
		return;
	}
	if(Place==N+1){
		printf("%.2lf",Money);
		return;
	}
	int i=Place+1;
	double cand=a[Place].Di+D2*C;
	int Cnt=0,j;
	for(j=i;;){
		if(a[j].Di<=cand){
		    j++;
		    Cnt++;
		}
		else break;
	}  
	int King=Check(i,i+Cnt,a[Place].Pi);
	if(!flag){
	Money+=(((a[King].Di-a[Place].Di)/D2-Rest)*a[Place].Pi);
	Find(King,0,Money);
	}
	else {
		Money+=((C-Rest)*a[Place].Pi);
		Find(King,C,Money);
	}
	return;
}
int main(){
	//freopen("P1016_1 (1).in","r",stdin);
	//freopen("P1016_1.out","w",stdout); 
	scanf("%lf%lf%lf%lf%d",&D1,&C,&D2,&P,&N);
	for(int i=1;i<=N;i++){
	scanf("%lf%lf",&a[i].Di,&a[i].Pi);
	}
	sort(a+1,a+N+1,cmp);
	a[N+1].Di=D1;
	a[0].Pi=P;
	a[N+1].Pi=-1000;
	a[0].Di=0;
	Find(0,0,0);
	return 0;
}

样例过了,下载数据也和答案一样;为什么会RE??

2023/10/11 20:18
加载中...