CCF 的测评机会卡精度吗?
  • 板块学术版
  • 楼主Segment_Treap
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/10/30 11:11
  • 上次更新2024/10/30 16:36:08
查看原帖
CCF 的测评机会卡精度吗?
1072900
Segment_Treap楼主2024/10/30 11:11

Rt.

CSP-S 2024 T2 代码:

#include <bits/stdc++.h>
using namespace std;
int t,n,m,tot,ans,mxp;
double mx,len,p[100100];
array<double,2> car[100100];
const double eps=0.0000000001,inf=1e9;
vector<array<double,2>> seg;
bool ok[100100];
void work(){
	tot=ans=mxp=0,seg.clear();
	scanf("%d%d%lf%lf",&n,&m,&len,&mx);
	for(int i=1;i<=n;i++){
		double pos,spe,add;
		scanf("%lf%lf%lf",&pos,&spe,&add);
		if(add==0.0){
			if(spe<=mx) continue; 
			seg.push_back({pos,len});
//			printf("! %.15f %.15f\n",pos,len);
		}else if(add>0.0){
			if(spe>mx){
//				printf("@ %.15f %.15f\n",pos,len);			
				seg.push_back({pos,len});
			}else{
				if(pos+(mx*mx-spe*spe)/(2*add)+eps<=len){
//					printf("# %.15f %.15f\n",pos+(mx*mx-spe*spe)/(2*add)+eps,len);
					seg.push_back({pos+(mx*mx-spe*spe)/(2*add)+eps,len});
				}
			} 
		}else if(add<0.0){
			if(spe<=mx) continue;
//			printf("$ %.15f %.15f\n",pos,min(pos+(mx*mx-spe*spe)/(2*add)-eps,len));
			seg.push_back({pos,min(pos+(mx*mx-spe*spe)/(2*add)-eps,len)});
		}
	}
	p[0]=(-inf),p[m+1]=inf;
	for(int i=1;i<=m;i++){
		scanf("%lf",&p[i]);
	}
	for(int i=1;i<=m;i++) ok[i]=true;
	for(auto sg:seg){
		int idx=lower_bound(p+0,p+m+2,sg[0])-p;
		if(p[idx]<=sg[1]){
			car[++tot]=sg;
		}
	}
	for(int i=1;i<=tot;i++){
		swap(car[i][0],car[i][1]);
	}
	sort(car+1,car+tot+1);
	for(int i=1;i<=tot;i++){
		swap(car[i][0],car[i][1]);
//		printf("%.15f %.15f\n",car[i][0],car[i][1]);
	}
	for(int p1=1,p2=0;p1<=tot;p1++){
		if(p[p2]<car[p1][0]){	
			while(p2+1<=m&&p[p2+1]<=car[p1][1]) p2++;
		}
		ok[p2]=false;
	}
	for(int i=1;i<=m;i++) ans+=ok[i];
	printf("%d %d\n",tot,ans);
}
int main(){
// 	freopen("detect.in","r",stdin);
// 	freopen("detect.out","w",stdout);
	scanf("%d",&t);
	for(;t--;) work();
}

*此代码在洛谷可以通过民间数据

CCF的测评机应该比洛谷强

2024/10/30 11:11
加载中...