社区讨论

80pts 玄关求调

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

讨论操作

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

当前回复
3 条
当前快照
1 份
快照标识符
@m34hgxkm
此快照首次捕获于
2024/11/05 21:26
去年
此快照最后确认于
2025/11/04 15:16
4 个月前
查看原帖
个人觉得是区间计算时精度的问题,但找不出来
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5; 
int n,m,L,V;
struct ca{
	int l,r;
}car[N];
int cnt;
int ch[N];
int liu[N];
int js,jss;
int ans1,ans2;
bool cmp(ca a,ca b){return a.r<b.r;}
void work(){
	memset(ch,0,sizeof(ch));
	memset(liu,0,sizeof(liu));
	ans1=ans2=js=cnt=0;
	
	scanf("%d%d%d%d",&n,&m,&L,&V);
	for(int i=1;i<=n;i++){
		int d,v,a; 
		scanf("%d%d%d",&d,&v,&a);
		if(a==0&&v>V) car[++cnt].l=d,car[cnt].r=L;
		if(a<0&&v>V){
			car[++cnt].l=d;	
			if((V*V-v*v)%(a*2)==0)	car[cnt].r=d+(V*V-v*v)/(2*a)-1;
			else car[cnt].r=d+(V*V-v*v)/(2*a);
		}
		if(a>0){
			if(v*v+2*a*(L-d)>V*V){
				car[++cnt].r=L;
				car[cnt].l=d+(V*V-v*v)/(2*a)+1;
//				if((V*V-v*v)%(2*a)==0) car[cnt].l=d+(V*V-v*v)%(2*a)+1;
//				else car[cnt].l=d+(V*V-v*v)%(2*a);
			}
		}
	}
	sort(car+1,car+1+cnt,cmp);
	for(int i=1;i<=m;i++)
		scanf("%d",&js),ch[js]=1;
	for(int i=1;i<=cnt;i++){
		bool ok=0;
		js=0;
		for(int j=car[i].r;j>=car[i].l;j--){
			if(ch[j]&&liu[j]){
				ok=1;
				break;
			}
		}
		if(!ok){
			for(int j=car[i].r;j>=car[i].l;j--){
				if(ch[j]){
					ok=1;
					liu[j]=1;
					ans2++;
					break;
				}
			}
		}
		if(ok) ans1++; 
	}
	
	printf("%d %d\n",ans1,m-ans2);
	return ;
}
int t;
int main(){
//	freopen("detect.in","r",stdin);
//	freopen("detect.out","w",stdout); 
	scanf("%d",&t);
	while(t--) work();
	return 0;
}

回复

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

正在加载回复...