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;
    }
    
  • 相关阅读:
    Linux删除文件相关命令
    Bing语句
    VS2013配置Winpcap
    node10-mongoose
    node09-cookie
    node08-express
    node07-http
    node06-path
    node05-fs
    node04-buffer
  • 原文地址:https://www.cnblogs.com/Rorschach-XR/p/11557406.html
Copyright © 2011-2022 走看看