求助
查看原帖
求助
1181906
6zhaonian楼主2024/10/28 10:16

为什么条件判断 if(!f2) 换成 else 就有 40pt 不换就是 0pt ??? 只特判了 A 性质和 B 性质。

//改之前
if(!f2){
	int cnt=0;
	for(int i=1;i<=n;i++){
		if(check(i,m)) cnt++;
	}
	if(cnt) printf("%d %d\n",cnt,m-1);
	else printf("%d %d\n",cnt,m);
	}
}
 //改之后
else{
	int cnt=0;
	for(int i=1;i<=n;i++){
		if(check(i,m)) cnt++;
	}
	if(cnt) printf("%d %d\n",cnt,m-1);
	else printf("%d %d\n",cnt,m);
	}
}

原代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+5;

int n,m,L,V;
int d[N],v[N],a[N];
int p[N];

bool check(int x,int y){
	if(d[x]>p[y]) return false;
	int s=p[y]-d[x];
	return v[x]*v[x]+2*a[x]*s>V*V;
}

int main(){
  
	int T;
	scanf("%d",&T);
	while(T--){
		bool f1,f2;
		scanf("%d%d%d%d",&n,&m,&L,&V);
		for(int i=1;i<=n;i++){
			scanf("%d%d%d",&d[i],&v[i],&a[i]);
			if(a[i]>0 || a[i]<0) f1=1;
			if(a[i]==0 || a[i]<0) f2=1;
		}
		for(int i=1;i<=m;i++){
			scanf("%d",&p[i]);
		}
		
		if(!f1){
			int cnt=0;
			for(int i=1;i<=n;i++){
				if(v[i]>V && d[i]<=p[m]){
					cnt++;
				}
			}
			if(cnt) printf("%d %d\n",cnt,m-1);
			else printf("%d %d\n",cnt,m);
		}
		if(!f2){
			int cnt=0;
			for(int i=1;i<=n;i++){
				if(check(i,m)) cnt++;
			}
			if(cnt) printf("%d %d\n",cnt,m-1);
			else printf("%d %d\n",cnt,m);
		}
	}
	
	return 0;
}
2024/10/28 10:16
加载中...