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

Bzoj 2456: mode 数论,众数

时间:2016-03-24 14:46:43      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:

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 数论,众数

标签:

原文地址:http://www.cnblogs.com/Var123/p/5315307.html

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