是否可以将大样例加入测试数据
查看原帖
是否可以将大样例加入测试数据
556545
_anll_楼主2024/10/28 08:07

rt,这是我赛后订正的代码:

#include<cmath>
#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
const int N=1e6+5;
struct P{
	int d,v,a;
}p[N];
int t,n,m,an,ans,tid,L,V,sum[N],del[N];
pair<int,int> po[N];
bool cmp (pair<int,int> a,pair<int,int> b){
	if(a.first==b.first) return a.second>b.second;
	else return a.first<b.first;
}
void solve1(P x){
	if(x.v>V){
		int l=sum[x.d-1],r=sum[L];
		if(l>=r) return;
		ans++;po[++tid]={l+1,r};
		return;
	}
	int len=ceil(1.0*(V*V-x.v*x.v+1)/(2*x.a))+x.d;
	if(len>L) return;
	int l=sum[len-1],r=sum[L];
	if(l>=r) return;
	ans++;po[++tid]={l+1,r};
}
void solve2(P x){
	if(x.v<=V) return;
	int len=floor(1.0*(V*V-x.v*x.v+1)/(2*x.a))+x.d;
	if(len>L) len=L;
	int l=sum[x.d-1],r=sum[len];
	if(l>=r) return;
	ans++;po[++tid]={l+1,r};
}
void solve3(P x){
	if(x.v<=V) return;
	int l=sum[x.d-1],r=sum[L];
	if(l>=r) return;
	ans++;po[++tid]={l,r};
}
void solve(){
	for(int i=1;i<=L;i++) sum[i]=del[i]=0;ans=0;tid=0;
	cin>>n>>m>>L>>V;L++;int x;an=m;
	for(int i=1;i<=n;i++)
		cin>>p[i].d>>p[i].v>>p[i].a,p[i].d++;
	for(int i=1;i<=m;i++){cin>>x;sum[x+1]++;}
	for(int i=1;i<=L;i++) sum[i]+=sum[i-1];
	for(int i=1;i<=n;i++){
		if(p[i].a>0) solve1(p[i]);
		else if(p[i].a<0) solve2(p[i]);
		else solve3(p[i]);
	}
	sort(po+1,po+1+tid,cmp);
	int minn=1e10;
	for(int i=tid;i;i--){
		if(minn<=po[i].second) del[i]=1;
		else minn=po[i].second;
	}
	minn=0;
	for(int i=1;i<=tid;i++){
		if(del[i]) continue;
		if(minn<po[i].first) an--,minn=po[i].second;
	}
	cout<<ans<<" "<<an<<endl;
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>t;while(t--) solve();
	return 0;
}

这是我测第三个样例时的输出:

2149 1605
2354 1241
2909 2440
2266 2263
2990 2098
163 905
1915 587
1384 286
0 2556
1066 2711
17388 80637
16426 70725
19783 57044
67559 26319
53536 63394
55684 84811
9911 74680
8092 80156
37099 71407
95747 63156

这是第三个大样例的输出:

2149 1605
2354 1241
2909 2440
2266 2263
2990 2098
163 905
1915 587
1384 286
0 2556
1066 2711
17388 80637
16426 70725
19783 57044
67559 26319
53536 63393
55684 84811
9911 74680
8092 80156
37099 71407
95747 63156

会发现对于第十五组样例,应当输出 53536 63393 而非 53536 63394,而我的代码却通过了本题。

因此是否可以将大样例加入测试数据?顺便求捞捞为什么这份代码过不了大样例 qwq......

2024/10/28 08:07
加载中...