zoukankan      html  css  js  c++  java
  • BZOJ-2456: mode (神题)

    2456: mode

    Time Limit: 1 Sec  Memory Limit: 1 MB
    Submit: 5768  Solved: 2361
    [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。



    zju2132 The Most Frequent Number

    Source

    鸣谢 黄祎程

    神题 hzwer Orz

    把每个数和一个与它不同的数相抵消,由于要求的数出现了超过n/2次,那么最后剩下的就是答案

     1 #include "stdio.h"
     2 using namespace std;
     3 int i,n,a,x=0,y=0;
     4 int main(){
     5     freopen ("mode.in","r",stdin);freopen ("mode.out","w",stdout);
     6     scanf("%d",&n);
     7     for (i=1;i<=n;i++){
     8         scanf("%d",&a);
     9         if (y!=a){
    10             if (x==0) {x=1,y=a;}
    11             else x--;
    12         }
    13         else x++;
    14     }
    15     printf("%d",y);
    16     return 0;
    17 }
    未来是什么样,未来会发生什么,谁也不知道。 但是我知道, 起码从今天开始努力, 肯定比从明天开始努力, 要快一天实现梦想。 千里之行,始于足下! ——《那年那兔那些事儿》
  • 相关阅读:
    随机小错2_0527
    随计小错
    C++实现读写文件
    03-树2 List Leaves (25 分)
    获取毫秒级的时间戳
    new对象时,类名后加括号与不加括号的区别
    FoxMail 7.2的邮件存储目录修改
    C/C++ 开源算法库
    VS2015的安装
    脏内存导致BUG的问题
  • 原文地址:https://www.cnblogs.com/keximeiruguo/p/7719876.html
Copyright © 2011-2022 走看看