int ii=1;
for(int j=1;j<=n;j++)
{
	if(ii+1>m) 
	{
		ans[ii]++;
	}
	else if(abs(driver[ii]-user[j])<=abs(driver[ii+1]-user[j])) 
	{
		ans[ii]++;
	}
	else 
	{
		ii++;
		j--;
	}
}

1 条评论

  • @ 2025-10-3 20:30:30

    #include<bits/stdc++.h> using namespace std; int n,m,user[100005],driver[100005],q,p,ans[100005]; struct user_driver { bool yn; int where; }; user_driver x[500005]; bool cmp(user_driver x,user_driver y) { return x.where<y.where; } int main() { freopen("taxi.in","r",stdin); freopen("taxi.out","w",stdout); cin>>n>>m; for(int i=1;i<=n+m;i++) { cin>>x[i].where; } for(int i=1;i<=n+m;i++) { cin>>x[i].yn; } sort(x+1,x+1+n+m,cmp); for(int i=1;i<=n+m;i++) { if(x[i].yn==1) driver[++p]=x[i].where; else user[++q]=x[i].where; } int ii=1; for(int j=1;j<=n;j++) { if(ii+1>m) { ans[ii]++; } else if(abs(driver[ii]-user[j])<=abs(driver[ii+1]-user[j])) { ans[ii]++; } else { ii++; j--; } } for(int i=1;i<=m;i++) { cout<<ans[i]<<" "; }

    return 0;
    

    }

    • 1