求助!卡在75分!!求教!!
查看原帖
求助!卡在75分!!求教!!
895690
gghack_Nythix楼主2023/2/26 17:18

rt

#include <bits/stdc++.h>
#define ld long double
using namespace std;
struct oil{
	ld d,p;
}a[25];
bool compare(oil x,oil y){
	return x.d < y.d;
}
signed main(int argc, char const *argv[])
{
	ld d1,c,d2,ans = 0;
	int n,last = 0;
	cin >> d1 >> c >> d2 >> a[0].p >> n;
	for(int i = 1;i <= n;++i){
		cin >> a[i].d >> a[i].p;
	}
	a[n + 1].d = d1;
	stable_sort(a,a + n + 1,compare);
	int ct;
	for(int i = 1;i <= n;++i){
		if(a[i].d - a[i - 1].d > c * d2){
			cout << "No Solution" << endl;
			return 0;
		}
	}
	for(int i = 0;i <= n;i = ct){
		int k;
		for(ct = k = i + 1;ct <= n + 1;++ct){
			k = a[ct].p <= a[k].p?ct:k;
			if(a[ct + 1].d - a[i].d > c*d2){
				break;
			}
			if(a[ct].p < a[i].p){
				break;
			}
		}
		if(a[ct].p < a[i].p){
			ans += ((a[ct].d - a[i].d) / d2 - last) * a[i].p;
			last = 0;
		}
		else{
			ans += (c - last) * a[i].p;
			last = k;
		}
	}
	cout << fixed << setprecision(2) << ans;
	return 0;
}
2023/2/26 17:18
加载中...