Bzoj 2456: mode 数论,众数

Posted 微弱的世界

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bzoj 2456: mode 数论,众数相关的知识,希望对你有一定的参考价值。

2456: mode

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

鸣谢 黄祎程

题解:

这道题内存给的实在是。。。

我不会告诉你 #include<bits/stdc++.h> 过不了。。。

只有用 #include<cstdio> 或 #include<stdio.h> 。。。

因为题目中说了这个数一定会出现*超过*n div 2 次。

例如样例:

3 2 3 1 3

我们可以把不相等的抵消。

3 - 2

3 - 1

剩下了一个3,即为众数。

然后从头到尾边输入,边判断是否和当前的数相等,相等就++,不相等就--。

加了读入优化更好呦~~~

 1 #include<cstdio>
 2 int read()
 3 {
 4     int s=0,fh=1;char ch=getchar();
 5     while(ch<0||ch>9){if(ch==-)fh=-1;ch=getchar();}
 6     while(ch>=0&&ch<=9){s=s*10+(ch-0);ch=getchar();}
 7     return s*fh;
 8 }
 9 int main()
10 {
11     int s=0,k=0,n;
12     n=read();
13     while(n--)
14     {
15         int a;
16         a=read();
17         if(k==0)s=a;
18         if(s==a)k++;
19         else k--;
20     }
21     printf("%d",s);
22     return 0;
23 }

 

以上是关于Bzoj 2456: mode 数论,众数的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ 2456 Mode

bzoj千题计划171:bzoj2456: mode

bzoj2456: mode

BZOJ 2456 mode

[BZOJ2456] mode

bzoj 2456 mode