50分help,有两个点RE了
查看原帖
50分help,有两个点RE了
537458
struct_cym楼主2022/6/9 12:38
#include <iostream>
#include <cstdio>
using namespace std;
const int N=1e3+10;
double d1,c,d2,p;
int n;
double mon[N],juli[N],maxx;
int flag;
int findd(int x){
	for(int i=x+1;i<=n;i++){
		if(juli[x]+maxx<juli[i]){
			return i-1;
		}
		if(mon[i]<mon[x]){
			return i;
		}
	}
}
int main(){
	cin>>d1>>c>>d2>>p>>n;
	maxx=c*d2;
	mon[0]=p;
	juli[0]=0;
	for(int i=1;i<=n;i++){
		cin>>juli[i]>>mon[i];
		if(juli[i-1]+maxx<juli[i]){
			cout<<"No Solution";
			return 0;
		}
	}
	int now=0;
	double now_ju=0;
	double sum=0;;
	while(true){
		if((!juli[now+1]||juli[now+1]>=d1)&&juli[now]+maxx>=d1){
			sum+=((d1-juli[now])/d2)*mon[now];
			printf("%.2lf",sum);
			return 0;
		}
		int k=findd(now);
		double tem_ju=(juli[k]-juli[now])/d2;
		
		sum+=mon[now]*tem_ju;
		now=k;
		now_ju=juli[k];
	}
	
}
2022/6/9 12:38
加载中...