救命
  • 板块学术版
  • 楼主dk_qwq
  • 当前回复27
  • 已保存回复27
  • 发布时间2024/11/4 19:41
  • 上次更新2024/11/4 20:37:06
查看原帖
救命
311306
dk_qwq楼主2024/11/4 19:41

md为啥我没用#include<vector>tmd在dev能编译通过啊?????

妈的为什么没虚拟机????

阿啊啊啊啊啊啊啊啊 废了

我要晕过去了

#include<iostream>
#include<cstdio>
#include<utility>
#include<algorithm>
#include<cmath>
#define MP make_pair
#define pb emplace_back 
#define endl '\n' 
using namespace std;
namespace INPUT{
	char buf[1<<20],*p1,*p2;
	#define gc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<20,stdin),p1==p2)?EOF:*p1++) 
}
using namespace INPUT;
template<typename T>
T read(){
	T x=0,p=1;
	char ch=gc();
	for(;ch<'0'||ch>'9';ch=gc())
		if(ch=='-') p=-1;
	for(;ch>='0'&&ch<='9';ch=gc())
		x=(x<<3)+(x<<1)+(ch^48);
	return x*p;
}
#define db double
int x(db v,db a,db V,int l,int r) { //2ax+v*v>V*V min
	int mid;
	while(l<r){
		mid=(l+r)/2;
		if(a*2*mid+v*v>V*V) r=mid;
		else l=mid+1;
	}
	return l;
}

int x2(db v,db a,db V,int l,int r) { //2ax+v*v>V*V max
	int mid;
	while(l<r){
		mid=(l+r+1)/2;
		if(a*2*mid+v*v>V*V) l=mid;
		else r=mid-1;
	}
	return l;
}

const int N=1e5+5,M=1e6+5; 
vector<pair<int,int>> car;
vector<pair<int,int>> tmp;
bool cmp_car(pair<int,int>& a,pair<int,int>& b){
	if(a.second!=b.second) return a.second<b.second;
	return a.first>b.first;
}
int n,m,L;db V;
pair<int,int> check(db d,db v,db a){
	if(a==0){
		if(v<=V) return MP(-1,0);
		return MP(d,L);
	}
	if(a>0){
		if(v>V) return MP(d,L);
		int d1=d+x(v,a,V,0,L-d+1);
//		int d1=d+ceil((V*V-v*v)/(a*2));
		if(d1>L) return MP(-1,0);
		return MP(d1,L);
	}
	if(a<0){
		if(v<=V) return MP(-1,0);
		int d2=d+x2(v,a,V,0,L-d+1);
//		int d2=d+floor((V*V-v*v)/(a*2));
		if(d2>L) d2=L;
		return MP(d,d2);
	}//���check����д 
	return {233,233};
}
vector<int>monitor;
int checked_car,used_monitor;
bool vis[N];
int cnt_monitor[M];
void solve(){//�ǵü����գ���������������
	checked_car=0,used_monitor=0;
	monitor.clear(),car.clear();
	n=read<int>(),m=read<int>(),L=read<int>();
	V=read<int>();
	for(int i=0;i<=n;i++) vis[i]=0;
	for(int i=1;i<=L;i++) cnt_monitor[i]=0;
	
	for(int d,v,a,i=1;i<=n;i++){
		d=read<int>(),v=read<int>(),a=read<int>();
		pair<int,int> sq=check(d,v,a) ;
		if(sq.first!=-1) car.pb(sq);
	}
	n=car.size();
	
	for(int i=1;i<=m;i++) monitor.pb(read<int>());
	sort(monitor.begin(),monitor.end());
	for(auto p:monitor) cnt_monitor[p]++;
	for(int i=1;i<=L;i++) cnt_monitor[i]+=cnt_monitor[i-1];
	
	
	for(int i=0;i<n;i++){
		pair<int,int> ed=car[i];
		if(cnt_monitor[ed.second]-cnt_monitor[ed.first-1])
			checked_car++,vis[i]=1; 
	}
	
	tmp.clear();
	for(int i=0;i<n;i++)
		if(vis[i]) tmp.pb(car[i]);
	swap(car,tmp);
	
	//����ȥ�� ������ ��� 
	sort(car.begin(),car.end(),cmp_car);
	
	tmp.clear();
	for(auto ed:car){
		if(tmp.empty()||tmp.back().first<ed.first)
			tmp.pb(ed);
	}
	swap(car,tmp);

	
//	debug
//		cout<<car.size()<<endl;
//	for(auto ed:car) cout<<ed.first<<' '<<ed.second<<endl;
//	for(auto p:monitor) cout<<p<<' ';
//	cout<<endl;

	int tim=-1,R=-1;
	for(auto ed:car){
		int l=ed.first,r=ed.second;
		if(l>R) {
			while(tim+1<m&&monitor[tim+1]<=r) tim++;
//			cout<<"use "<<monitor[tim]<<endl;
			R=monitor[tim];
			used_monitor++;
		}
//		cout<<tim<<endl;
	}
	cout<<checked_car<<' '<<m-used_monitor<<endl;
}
int main(){
	freopen("detect.in","r",stdin);
	freopen("detect.out","w",stdout);
	int T=read<int>();
	while(T--) solve();
}

2024/11/4 19:41
加载中...