55求助
查看原帖
55求助
323183
CLCK楼主2020/8/6 12:04
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int n, L, v, q;
bool flag;
int a[200005];
int t[200005];
double time(int d, int v) {
	double dis = d;
	double V = v;
	return dis / V;
}
int ans(int v) {
    int low = 0, high = n - 1;
    if (v > t[high]) return -1;
    while( low <= high )
    {
	int mid = (low + high) >> 1;
	if( t[mid] >= v )
	    high = mid - 1;
	else low = mid + 1;
    }
    return low;
}
int main() {
	//freopen("endless.in", "r", stdin);
	//freopen("endless.out", "w", stdout);
	cin >> n >> L >> v;
	for (int i = 0; i < n; i++) {
		cin >> a[i];
	}
	sort(a, a + n, greater<int>());
	t[0] = time(L + a[0], v);
	for (int i = 1; i < n; i++) {
		t[i] = t[i - 1] + time(a[i], v);
	}
	cin >> q;
	while (q--) {
		double x;
		double l = L;
		cin >> x;
		flag = false;
		if (time(l, v) > x) {
			cout << 0 << endl;
			continue;
		}
		int answ = ans(x);
		if (answ == -1) {
			cout << -1 << endl;
			continue;
		}
		cout << answ + 1 << endl;
	}
	return 0;
}
2020/8/6 12:04
加载中...