TLE on #1#2#7#8#9#10
查看原帖
TLE on #1#2#7#8#9#10
591561
Xianzi_楼主2024/10/27 16:05

求调QwQ

#include "bits/stdc++.h"
using namespace std;
struct node{
	int d, v, a;
	bool operator< (const node &x) const{return d < x.d;};
} car[100005], up1[100005], up2[100005];
int t, n, m, L, v;
int ans1, ans2;
int p[100005];
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> t;
	while (t--){
		ans1 = 0, ans2 = 0;
		cin >> n >> m >> L >> v;
		for (int i = 1; i <= n; i++)
			cin >> car[i].d >> car[i].v >> car[i].a;
		for (int i = 1; i <= m; i++) cin >> p[i];
		for (int i = 1; i <= n; i++){
			if (car[i].d > p[m]) continue;
			if (car[i].a >= 0){
				double vv = sqrt(car[i].v * car[i].v + 2 * car[i].a * (p[m] - car[i].d));
				if (vv > 1.0 * v) up1[ans1++] = {car[i].d, car[i].v, car[i].a};
			}
			else {
				int l = 1, r = m;
				while (l < r){
					int mid = (l + r) >> 1;
					if (p[mid] < car[i].d) l = mid + 1;
					else r = mid;
				}
				double vv = sqrt(car[i].v * car[i].v + 2 * car[i].a * (p[l] - car[i].d));
				if (vv > 1.0 * v) up2[ans2++] = {car[i].d, car[i].v, car[i].a};
			}
		}
		sort(up2, up2 + ans2 + 1);
		int mn = m + 1, res = 0, cnt = 0;
		up2[ans2 + 1].d = L + 1;
		for (int i = 1; i <= ans2; i++){
			double dist = (v * v - car[i].v * car[i].v) * 1.0 / (2 * up2[i].a) + up2[i].d;
			int l = 1, r = m + 1;
			while (l < r){
				int mid = (l + r) >> 2;
				if (p[mid] < dist) l = mid + 1;
				else r = mid; 
			}
			mn = min(mn, l - 1);
			if (p[mn] < up2[i + 1].d)
				res = mn, mn = m + 1, cnt++;
		}
		for (int i = 1; i <= ans1; i++){
			if (up1[i].d > p[res]) {cnt++; break;}
			double vv = sqrt(up1[i].v * up1[i].v + 2 * up1[i].a * (p[res] - up1[i].d));
			if (vv <= v) {cnt++; break;}
		}
		cout << ans1 + ans2 << " " << m - cnt << "\n";
	}
	return 0;
}
2024/10/27 16:05
加载中...