码迷,mamicode.com
首页 > 其他好文 > 详细

[CF818D] Multicolored Cars - 思维

时间:2020-04-29 18:03:16      阅读:50      评论:0      收藏:0      [点我收藏+]

标签:using   lin   计数   cout   ali   个数   rip   for   出现   

Description

现在给出 \(n\) 个数 \(a_{1},a_{2},…,a_{n}\)\(a_{i}\) 表示时刻 \(i\) 出现的数。定义 \(cnt_{x}(i)\) 表示到 \(i\) 时刻 \(x\) 出现过的个数。Alice 选择了一个数 \(m\),请帮助 Bob 选择一个数 \(k\ne m\),使得对任意时刻 \(i\),都有 \(cnt_{k}(i) \ge cnt_{m}(i)\)。若不存在这样的 \(k\) 请输出 \(-1\)

Solution

维护计数器,统计到当前时刻每个数字 \(x\) 出现了多少次

记录当前时刻 \(m\) 的个数为 \(now\),如果某个 \(x\) 出现在 \(m\) 后面,且 \(cnt[x]<now\)\(x\) 不合法,满足这种情况我们就不继续加了

最后扫一遍计数器即可

#include <bits/stdc++.h>
using namespace std;

const int N = 1000005;

int n,a[N],cnt[N],m,k=-1;

signed main() {
    ios::sync_with_stdio(false);
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<=n;i++) {
        if(a[i]==m || cnt[a[i]]>=cnt[m]) {
            ++cnt[a[i]];
        }
    }
    for(int i=1;i<=n;i++) {
        if(a[i]!=m && cnt[a[i]]>=cnt[m]) k=a[i];
    }
    cout<<k;
}

[CF818D] Multicolored Cars - 思维

标签:using   lin   计数   cout   ali   个数   rip   for   出现   

原文地址:https://www.cnblogs.com/mollnn/p/12803583.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!