社交距离II


题目

1660. 社交距离 II - AcWing题库

由于高传染性的牛传染病 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;
    }

}

文章作者: 姜小白
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 姜小白 !
评论
  目录