zoukankan      html  css  js  c++  java
  • [BZOJ2456] mode

    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。

      zju2132 The Most Frequent Number 

    Source

      鸣谢 黄祎程

    Solution

      历史总是惊人地相似,被九章算法某一道简单题(题目详见CodeVS3295)艹后又被一道简单题艹。

      1MB空间,连数组都不让开,用cin都MLE。

      要不你先想一会

      。。。。。。

      。。。。。。

      。。。。。。

      。。。。。。

      。。。。。。

      。。。。。。

      想不到吧,蛤蛤。

     1 #include <cstdio>
     2 using namespace std;
     3 int main()
     4 {
     5     int n, a, tot = 0, ans = 0;
     6     scanf("%d", &n);
     7     while(n--)
     8     {
     9         scanf("%d", &a);
    10         if(a == ans) tot++;
    11         else
    12         {
    13             tot--;
    14             if(tot <= 0) ans = a, tot = 1;
    15         }
    16     }
    17     printf("%d", ans);
    18     return 0;
    19 }
    View Code

      tot为正表示这个数目前是众数,tot小于等于0则表示这个数目前不会成为众数。

      如果ans这个数已经出现了超过n/2次,那么它不会被别的数替换了,因为tot会一直大于0。

      如果ans这个数没出现超过n/2次,那么它一定会被其它数替换,且最终会被换成众数。

      MDZZ,语文好差,感觉自己无法给别人讲懂题。

  • 相关阅读:
    3.13 获取位置
    团队博客(三)
    团队博客(二)
    团队博客(一)
    Android抽奖
    声网实现视频会议(二)
    声网实现视频会议(一)
    Android弹幕实现原理
    人月神话 胸有成竹
    Android的弹幕功能实现(四)
  • 原文地址:https://www.cnblogs.com/CtrlCV/p/5351290.html
Copyright © 2011-2022 走看看