一个晚上
查看原帖
一个晚上
217065
二流公民楼主2021/8/17 20:43

这个题我调了一个晚上!!

到底哪里错了啊!!!??

#include <bits/stdc++.h>
#define INF 99999999
using namespace std;

double dis, C, disl, pri, sy;
int n;
double dismax;
double ans, rem, b = 1.0;
struct data {
	double d, p;
}f[10];

bool cmp(data a, data b) {
	return a.d < b.d;
}

void journey(int x) {
	double pr = INF; int po;
	for (int i = x + 1; i <= n; i++) {
		if(f[x].d + dismax < f[i].d) break;
		if(pr > f[i].p) 
		pr = f[i].p, po = i;
	}
	double dish = f[po].d - f[x].d;
	if(f[x].p <= pri && f[x].d + dismax >= dis) {
		ans += ((dis - f[x].d) / disl - sy) * f[x].p;
		printf("%.2lf", ans);
		exit(0);
	}
	if(pr == INF) {
		printf("No Solution");
		exit(0);
	}
	if(pr <= f[x].p) {
		ans += (dish / disl - sy) * f[x].p;
		sy = 0.0;
	}
	else {
		ans += (C - sy) * f[x].p;
		sy = C - dish / disl;
	}
	journey(po);
}

int main() {
	scanf("%lf%lf%lf%lf%d", &dis, &C, &disl, &pri, &n);
	for (int i = 1; i <= n; i++) {
		scanf("%lf%lf", &f[i].d, &f[i].p);
	}
	f[0].d = 0.0, f[0].p = pri;
	sort(f + 1, f + n + 1, cmp);
	dismax = C * disl;
	journey(0);
	return 0;
}
2021/8/17 20:43
加载中...