题目
由于高传染性的牛传染病 COWVID-19 的爆发,Farmer John 非常担忧他的奶牛们的健康。
尽管他尽了最大努力使他的 N 头奶牛们践行“社交距离”,还是有许多奶牛不幸染上了疾病。
编号为 1…N 的奶牛们分别位于一条长直道路上的不同位置(相当于一维数轴),奶牛 i 位于位置 xi。
Farmer John 知道存在一个半径 R,任何与一头被感染的奶牛距离不超过 R 单位的奶牛也会被感染(然后会传染给与其距离 R 单位内的奶牛,以此类推)。
不幸的是,Farmer John 并不确切知道 R 的值。
他只知道他的哪些奶牛被感染了。
给定这个数据,求出起初感染疾病的奶牛的最小数量。
输入格式
输入的第一行包含 N。
以下 N 行每行用两个整数 x 和 s 描述一头奶牛,其中 x 为位置,s 为 0 表示健康的奶牛,1 表示染病的奶牛,并且所有可能因传播而染病的奶牛均已染病。
输出格式
输出在疾病开始传播之前已经得病的奶牛的最小数量。
数据范围
1≤N≤1000,
0≤x≤10^6
代码
import java.util.*;
public class Main {
static int N = 100010;
static int n, ans = 0, l = 1000010;
static node[] a = new node[1010];
public static void main(String[] args) {
Scanner inScanner = new Scanner(System.in);
n = inScanner.nextInt();
for(int i = 1; i <= n; i ++)
a[i] = new node(inScanner.nextInt(), inScanner.nextInt());
inScanner.close();
Arrays.sort(a, 1, n + 1);
for(int i = 2; i <= n; i ++)
if((a[i].v ^ a[i - 1].v) == 1)
{
int t = a[i].x - a[i - 1].x;
l = t < l ? t : l;
}
if(a[1].v == 1)
ans ++;
for(int i = 2; i <= n; i ++)
{
if(a[i].v == 1 && a[i - 1].v == 0)
ans ++;
else if(a[i].v + a[i - 1].v == 2)
{
if(a[i].x - a[i - 1].x >= l)
ans ++;
}
}
System.out.printf("%d", ans);
}
}
class node implements Comparable<node>
{
int x, v;
public node(int x, int v)
{
this.x = x;
this.v = v;
}
public int compareTo(node o)
{
return x - o.x;
}
}