为什么条件判断 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;
}