也是挂在#5了,求调玄关感谢
查看原帖
也是挂在#5了,求调玄关感谢
498360
Leonard_Mitchell楼主2024/10/4 19:08
#include<iostream>
#include<cstdio>

using namespace std;

double d1,c,d2,p0;
int n,i;
double d[10],p[10];

double nc,minn;

int main(){
    scanf("%lf%lf%lf%lf%ld",&d1,&c,&d2,&p0,&n);
    for(int i=1;i<=n;i++){
    	scanf("%lf%lf",&d[i],&p[i]);
	}
	p[0]=p0,d[n+1]=d1;//!!!!
	n+=1;
	while(i<n){
		int ffmin;
		if(((d[i+1]-d[i])*1.0/d2)>c){
			cout<<"No Solution";
			return 0;
		}
		for(int j=i+1;j<=n;j++){
			if(p[i]>=p[j]){
			    ffmin=j;
			    break;
			}
		}
		double gof=(d[ffmin]-d[i])*1.0/d2;
		if(gof<c){
		    //cout<<i<<"->"<<ffmin<<endl;
		    //cout<<"需要"<<gof;
			if(gof<=nc){
				i=ffmin,nc-=gof;
			}else{
				minn+=((gof-nc)*1.0*p[i]);
				i=ffmin,nc=0;
			}
	        //cout<<"还有"<<nc<<endl;
		}else{
			int smind,sminp=0x3f3f3f3f;
			for(int j=i+1;((d[j]-d[i])*1.0/d2)<=c;j++){
				if(p[j]<=sminp){
					sminp=p[j],smind=j;
				}
			}
		    //cout<<i<<"->"<<smind<<endl;
			minn+=((c-nc)*1.0*p[i]);
			i=smind,nc=(c-(d[smind]-d[i])*1.0/d2);
	        //cout<<"还有"<<nc<<endl;
		}
		//cout<<minn<<endl;
	}
	printf("%.2lf",minn);
}


我输出的174.65

2024/10/4 19:08
加载中...