[题解]CF76B Mice

思路

比较简单的贪心。

对于可以选择两个奶酪的老鼠,我们先将它们忽略掉。现在所有老鼠所吃的奶酪是唯一确定的。

考虑加上可以选择两个奶酪的老鼠如何选择。显然,如果它可以选择一个没有任何老鼠吃过的奶酪,它必然这样选择。

其次,如果它可以选择的奶酪被吃掉的时间 t 与它到达奶酪的时间 T 相同,则可以选择共享。

并且可以证明如果这个老鼠不满足上述所有情况,也不会对答案产生影响。


如下是简单的证明过程:

令这个在 x 位置上的老鼠走到的奶酪位置分别为 a,b,则有 xa=bx

由于老鼠两两之间位置不同,并且奶酪两两之间位置不同。因此对于同一块奶酪,最多只会有两只老鼠共享。假设这两个位置为 p,q,并且 pq

进行一个简单的分讨:

  1. ap<xa,显然答案不变,因为前者比后者率先到达目的地。

  2. ap>xa。因为 xa=bxap=qa,因此 q[x,b],但是此时离 q 最近的点是 b,不可能出现此情况。

由此得证。

Code

#include <bits/stdc++.h>
#define re register

using namespace std;

const int N = 1e5 + 10,inf = 1e9 + 10;
int n,m,_,sum;
int x[N],xx[N];
int Min[N],cnt[N];

struct point{
    int l,r,dist;
};
vector<point> v;

inline int read(){
    int r = 0,w = 1;
    char c = getchar();
    while (c < '0' || c > '9'){
        if (c == '-') w = -1;
        c = getchar();
    }
    while (c >= '0' && c <= '9'){
        r = (r << 3) + (r << 1) + (c ^ 48);
        c = getchar();
    }
    return r * w;
}

int main(){
    n = read(),m = read();
    _ = read(),_ = read();
    for (re int i = 1;i <= n;i++) x[i] = read();
    for (re int i = 1;i <= m;i++){
        xx[i] = read(); Min[i] = inf;
    }
    xx[0] = -inf; xx[m + 1] = inf;
    for (re int i = 1,j = 1;i <= n;i++){
        while (j < m && xx[j] < x[i]) j++;
        int a = abs(x[i] - xx[j - 1]),b = abs(x[i] - xx[j]);
        if (a < b){
            if (Min[j - 1] > a){
                Min[j - 1] = a; cnt[j - 1] = 1;
            }
            else if (Min[j - 1] == a) cnt[j - 1]++;
        }
        else if (a > b){
            if (Min[j] > b){
                Min[j] = b; cnt[j] = 1;
            }
            else if (Min[j] == b) cnt[j]++;
        }
        else v.push_back({j - 1,j,a});
    }
    for (point p:v){
        if (Min[p.l] == p.dist) cnt[p.l]++;
        else if (Min[p.r] == p.dist) cnt[p.r]++;
        else if (!cnt[p.l]){
            Min[p.l] = p.dist; cnt[p.l] = 1;
        }
        else if (!cnt[p.r]){
            Min[p.r] = p.dist; cnt[p.r] = 1;
        }
    }
    for (re int i = 1;i <= m;i++) sum += cnt[i];
    printf("%d",n - sum);
    return 0;
}

作者:WaterSun

出处:https://www.cnblogs.com/WaterSun/p/18365166

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   WBIKPS  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示