WA on #6 #10 求调
查看原帖
WA on #6 #10 求调
602833
kczw楼主2024/10/27 20:42

大样例全过。

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,m,L,V,top;
int d[N],v[N],a[N],p[N];
pair<int,int>stk[N];
inline bool cmp(pair<int,int>A,pair<int,int>B){
	return A.second!=B.second?A.second<B.second:A.first<B.first;
}
inline void add(int lef,int rig){
	if(lef>rig||lef>p[m]||rig<p[1])return;
	int l=1,r=m,mid;
	while(l<r){
		mid=l+r>>1;
		if(lef<=p[mid])r=mid;
		else l=mid+1;
	}
	if(rig<p[l])return;
	lef=l;r=m;
	while(l<r){
		mid=l+r+1>>1;
		if(p[mid]<=rig)l=mid;
		else r=mid-1;
	}
	stk[++top]={lef,l};
	return;
}
inline void solve(){
	scanf("%d%d%d%d",&n,&m,&L,&V);
	top=0;
	for(int i=1;i<=n;i++)scanf("%d%d%d",&d[i],&v[i],&a[i]);
	for(int i=1;i<=m;i++)scanf("%d",&p[i]);
	for(int i=1,x;i<=n;i++){
		if(a[i]>0){
			if(v[i]>V)add(d[i],L);
			else if(v[i]*v[i]+2*a[i]*(L-d[i])>V*V){
				x=(V*V-v[i]*v[i])/(a[i]+a[i]);
				if((V*V-v[i]*v[i])%(a[i]+a[i])==0)x++;
				add(x+d[i],L);
			}
		}
		else if(a[i]==0){
			if(v[i]>V)add(d[i],L);
		}
		else if(v[i]>V){
			x=(V*V-v[i]*v[i])/(a[i]+a[i]);
			if((V*V-v[i]*v[i])%(a[i]+a[i])==0)x--;
			add(d[i],d[i]+x);
		}
	}
	sort(stk+1,stk+top+1,cmp);
	for(int i=1,mx=0;i<=top;i++)
		if(mx<stk[i].first){
			m--;
			mx=stk[i].second;
		}
	printf("%d %d\n",top,m);
	return;
}
int main(){
	int t;scanf("%d",&t);
	while(t--)solve();
	return 0;
}
2024/10/27 20:42
加载中...