logo Algo Beat Contest
登录 注册

警示后人

作者: HIOI-vscode  ·  发布于 2026-05-12 22:18:20  ·  最后修改于 2026-05-13 0:29:54
已通过

一、题意前提 给定 个投票编号,保证存在唯一一个编号,票数严格超过总票数一半。

设该编号得票数为 ,满足: 小于n

二、核心思想 不一样的数互相抵消,最后剩下的候选人,就是绝对多数。

三、维护变量 :当前候选代表 :候选存活计数器 四、算法规则 若 : 更换当前数为新候选,令 当前数, 当前数与候选 相同: 自己人, 当前数与候选 不同: 相互抵消, 遍历一遍所有数,最终 就是答案。

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

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n;
    cin >> n;
    int candidate=0,cnt=0;
    int x;
    for (int i = 0; i < n; i++) 
    {
        cin>>x;         
        if (cnt==0) 
        {
            candidate=x;
            cnt=1;
        } 
        else if (x==candidate) 
        {
            cnt++;
        } 
        else 
        {
            cnt--;
        }
    }
    cout<<candidate<<'\n';
    return 0;
}

小心O(n)

暂无评论

登录 后即可评论。