社区讨论

民间数据AC 官方数据80pts

P11232[CSP-S 2024] 超速检测参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@m333stn3
此快照首次捕获于
2024/11/04 22:15
去年
此快照最后确认于
2024/11/05 11:39
去年
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
//_________________________________________________________________________________________________________________________________________
const int N = 100009;
int n, m, L, V;
struct AC{
	int d, v, a;
	int l, r;//(l, r)
	void calc(){
		l = -1, r = -1;
		if(a == 0){
			if(v > V){
				l = d - 1;
				r = L + 1;
			}
		}
		else if(a > 0){
			if(v > V){
				l = d - 1;
				r = L + 1;
			}
			else{
				int k = (V * V - v * v) % (a * 2) == 0 ? -1 : 0;
				l = (V * V - v * v) / (a * 2) + d + k;
				r = L + 1;
			}
		}
		else{
			if(v > V){
				int k = (V * V - v * v) % (a * 2) == 0 ? 0 : 1;
				l = d - 1;
				r = (V * V - v * v) / (a * 2) + d + k;
			}
		}
		if(l < 0) l = -1;
		if(r > L) r = L + 1;
		if(l >= r) l = -1, r = -1;
	}
};
struct line{
	int l, r;//[l, r]
};
AC c[N];
line l[N];
int p[N];

bool cmp1(AC a, AC b){
	return a.l < b.l;
}

bool cmp2(line a, line b){
	return a.r < b.r;
}

void doit(){
	memset(p, 0, sizeof(p));
	scanf("%d%d%d%d", &n, &m, &L, &V);
	for(int i = 1; i <= n; i++){
		scanf("%d%d%d", &c[i].d, &c[i].v, &c[i].a);
		c[i].calc();
	}
	for(int i = 1; i <= m; i++) scanf("%d", &p[i]);
	
//	sort(c + 1, c + n + 1, cmp1);
	int  rp = 0;
	for(int i = 1; i <= n; i++){
		int ll = upper_bound(p + 1, p + m + 1, c[i].l) - p;
		int rr = lower_bound(p + 1, p + m + 1, c[i].r) - p - 1;
		if(p[ll] < c[i].r && ll <= m) l[++rp] = {ll, rr};
	}
	
	sort(l + 1, l + rp + 1, cmp2);
	int cnt = 0, ed = -0x3f3f3f3f;
	for(int i = 1; i <= rp; i++){
		if(l[i].l > ed){
			cnt++;
			ed = l[i].r;
		}
	}
	
	printf("%d %d\n", rp, m - cnt);
}

int main() {
//	freopen("detect.in","r",stdin);
//	freopen("detect.out","w",stdout);
	int T;
	scanf("%d", &T);
	while(T--){
		doit();
	}

	return 0;
}


回复

0 条回复,欢迎继续交流。

正在加载回复...