zoukankan      html  css  js  c++  java
  • 活动投票

    活动投票( 思维题(star ))

    • 时限:(0.5s) 内存:(2M)

    Descrption

    • 衡中活动很多,人也很多,一次活动有 (n) 个学生参与投票,现已知一名参赛选手票数超过半数,求其参赛号(a_i)(参赛号随机,(0le a_i le 2147483647)) 。

    Input

    • 第一行一个整数 (n)
    • 第二行 (n) 个整数 (N_i) 代表第 (i) 个学生所投选手的参赛号。

    Output

    • 超过半数选手的参赛号。

    Sample Input

    10
    5 1 2 5 5 2 3 5 5 5
    

    Sample Output

    5
    

    Hint

    • (100\%) 的数据满足:(n ≤3000000)
    • 来源:(20180718)

    分析

    • 我们要求的数 (x) 的出现次数一定是比其他任何数的出现次数多,那么我们把所有的不同的数之间相互配对,剩下的数就一定是我们要求的
      • (3, 1, 4 ,5, 1, 1, 1, 5, 1, 1, 1, 1->(1,3)(1,4)(1,5)(1,5),1,1,1,1)
    • 具体实现时采用按序消除的方法
      • 每次碰到一个数,如果它和上一个数不同,就把它和上一个数配对并消掉
      • 如果它和上一个数相同,就个数加一
      • 最后剩下的数就是答案。
    • 空间复杂度为:(O(1)),时间复杂度为 (O(n))

    Code

    #include <bits/stdc++.h>
    const int maxn=100+5,Inf=0x3f3f3f3f;
    
    void Solve(){
        int cnt=0,ans,n;
        scanf("%d",&n);
        for(int i=1;i<=n;++i){
            int x;scanf("%d",&x);
            if(cnt==0)//全抵消了那暂定为答案
                ans=x,cnt++;
            else
                if(x!=ans) --cnt;//不相同就抵消一对
                else ++cnt;//相同的个数加一
        }
        printf("%d
    ",ans);
    }
    int main() {
        Solve();
        return 0;
    }
    
  • 相关阅读:
    博客阅读计数优化
    博客阅读简单计数
    博客后台富文本编辑
    博客分类统计
    Django关联关系查询
    上下篇博客,按月归档
    浅谈闭包以及常见面试题
    浅谈前端缓存(转至大佬)
    post请求头的常见类型
    浅谈RegExp 对象的方法
  • 原文地址:https://www.cnblogs.com/hbhszxyb/p/13283003.html
Copyright © 2011-2022 走看看