由于高传染性的牛传染病 COWVID-19 的爆发,Farmer John 非常担忧他的奶牛们的健康。
尽管他尽了最大努力使他的 头奶牛们践行“社交距离”,还是有许多奶牛不幸染上了疾病。
编号为 的奶牛们分别位于一条长直道路上的不同位置(相当于一维数轴),奶牛
位于位置
。
Farmer John 知道存在一个半径 ,任何与一头被感染的奶牛距离不超过
单位的奶牛也会被感染(然后会传染给与其距离
单位内的奶牛,以此类推)。
不幸的是,Farmer John 并不确切知道 的值。
他只知道他的哪些奶牛被感染了。
给定这个数据,求出起初感染疾病的奶牛的最小数量。
输入格式
输入的第一行包含 。
以下 行每行用两个整数
和
描述一头奶牛,其中
为位置,
为
表示健康的奶牛,
表示染病的奶牛,并且所有可能因传播而染病的奶牛均已染病。
输出格式
输出在疾病开始传播之前已经得病的奶牛的最小数量。
数据范围
输入样例:
6
7 1
1 1
15 1
3 1
10 0
6 1
输出样例:
3
样例解释
在这个例子中,我们知道 ,否则位于位置
的奶牛会传染给位于位置
的奶牛。
所以,至少 头奶牛初始时已被感染:位于位置
和
的两头奶牛中的一头,位于位置
和
的两头奶牛中的一头,以及位于位置
的奶牛。
using namespace std;
typedef pair<int, int> PII;
const int N = 1010, INF = 1e9;
PII q[N];
int main(){
int n;
scanf("%d", &n);
int a, b;
for(int i = 1; i <= n; i++){
scanf("%d%d", &a, &b);
q[i] = {a, b};
}
sort(q + 1, q + n + 1);
// 求 min(r)
int r = INF;
q[0] = {-INF, 0};
for(int i = 1; i <= n; i++)
if(q[i].y ^ q[i - 1].y) r = min(r, q[i].x - q[i - 1].x);
int res = 0;
for(int i = 1; i <= n; i++)
if(q[i].x - q[i - 1].x >= r && q[i].y) res++;
printf("%d\n", res);
return 0;
}