zoukankan      html  css  js  c++  java
  • [BZOJ] 2456: mode #众数计数法

    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 }
    计数
  • 相关阅读:
    HttpClient(4.3.5)
    HttpClient(4.3.5)
    HttpClient(4.3.5)
    Apache Commons 简述
    树形结构在关系数据库中的设计
    JDK Tools
    JDK Tools
    Linux中Shell循环结构for用法笔记
    Linux有关Shell中if用法笔记
    Linux有关Shell中if用法笔记
  • 原文地址:https://www.cnblogs.com/Chorolop/p/7772824.html
Copyright © 2011-2022 走看看