zoukankan      html  css  js  c++  java
  • [bzoj2456]mode 题解

    改题改自闭的时候当然要靠水题来调节心情(逃

    2456: mode

    Time Limit: 1 Sec  Memory Limit: 1 MB
    Submit: 8461  Solved: 3171
    [Submit][Status][Discuss]

    Description

    给你一个n个数的数列,其中某个数出现了超过n div 2次即众数,请你找出那个数。

    Input

    第1行一个正整数n。
    第2行n个正整数用空格隔开。

    Output

        一行一个正整数表示那个众数。

    Sample Input

    5
    3 2 3 1 3

    Sample Output

    3

    HINT

    100%的数据,n<=500000,数列中每个数<=maxlongint。

    裸的摩尔投票法。

    $1MB$的内存显然不能开任何数组。维护两个变量$id,cnt$。当$cnt$为0时,令当前输入的数为$id$,然后把$cnt$置为1。否则,如果当前输入与$id$相等则$cnt++$,反之$cnt--$。

    因为只需要求出现次数大于$frac{n}{2}$的数,所以只维护当前有可能成为答案的数,如果出现了别的数相当与抵消了一次这个数的贡献,出现了这个数那么贡献+1。

    #include<cstdio>
    int n,x,id,cnt;
    void add(int x)
    {
        if(!cnt)id=x,cnt=1;
        else
        {
            if(id==x)cnt++;
            else cnt--;
        }
    }
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&x);
            add(x);
        }
        printf("%d
    ",id);
        return 0;
    }
    
  • 相关阅读:
    HDU 1505 & POJ 1964 City Game (递推+扫描法)
    web页面内容优化管理与性能技巧
    POJ2406简单KMP
    poj2418map或者字典树
    poj2418map或者字典树
    POJ2296二分2sat
    POJ2296二分2sat
    poj2186强联通(牛仰慕)
    poj2186强联通(牛仰慕)
    poj2175费用流消圈算法
  • 原文地址:https://www.cnblogs.com/Rorschach-XR/p/11557406.html
Copyright © 2011-2022 走看看