若使得初始牛感染的数量最小,我们应该可以想到此时r应该是最大的
所以我们先寻找最大的r值,然后排序的前提寻找有多少头牛与上一头牛大于r便是答案
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=1e3+10;
int a[N],b[N];
int x,y;
int n,r=1e6+10,res;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
int p,q;
cin>>p>>q;
if(q==1)a[x++]=p;
else b[y++]=p;
}
sort(a,a+x);
sort(b,b+y);
for(int i=0,j=0;i<x;i++)
{
if(j<y-1&&abs(a[i]-b[j])>abs(a[i]-b[j+1]))j++;
r=min(r,abs(a[i]-b[j]));
}
for(int i=1;i<x;i++)
{
if(a[i]-a[i-1]>=r)res++;
}
cout<<++res;
return 0;
}