码迷,mamicode.com
首页 > 其他好文 > 详细

[BZOJ] 2456: mode #众数计数法

时间:2017-11-02 16:57:23      阅读:289      评论:0      收藏:0      [点我收藏+]

标签:src   数列   技术   mod   scanf   max   onclick   space   input   

2456: mode

Time Limit: 1 Sec  Memory Limit: 1 MB
Submit: 5969  Solved: 2414
[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

鸣谢 黄祎程

Analysis

噗嗤,偏门算法总算有出头之日了

正解:某种不在OI范畴内的(摩尔?)计数法

首先准备一个变量和一个计数器,当计数器为0时,变量是空的,遇到一个元素就装进去

当遇到的元素与变量内的值不一样的时候,计数器减一,反之加一

这样,最后变量的值即为众数

当然这样会被卡双众数,弄个储存器再额外记录哩

Code

技术分享
 1 #include<stdio.h>
 2 using namespace std;
 3 
 4 long long bolt = 0,cnt = 0,tmp;
 5 
 6 int main(){
 7     int n; scanf("%d",&n);
 8     
 9     for(int i = 1;i <= n;i++){
10         scanf("%lld",&tmp);
11         if(!cnt) bolt = tmp,cnt = 1;
12         else if(tmp == bolt) cnt++;
13         else cnt--;
14     }
15     
16     printf("%lld",bolt);
17     
18     return 0;
19 }
计数

 

[BZOJ] 2456: mode #众数计数法

标签:src   数列   技术   mod   scanf   max   onclick   space   input   

原文地址:http://www.cnblogs.com/Chorolop/p/7772824.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!