BZOJ2456

2456: mode

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。

【题解】

1MB= =

(卡空间题见多了= =,没卡空间不就是一道LOW题= =)

由于卡空间,不能使用Hash和排序算法

但是众数一定大于总数的一半(咦)

那么这样统计

如果这个数和之前假设的众数相同,那么该众数个数+1

否则由于该数可能不是众数,个数-1

如果众数个数为0,说明该众数个数在之前的序列中不足一半。同时更新众数。

将所有序列的处理完最后保存的众数就是答案

 1 #include<stdio.h>
 2 int a,b,n;
 3 void init()
 4 {
 5     scanf("%d",&n);
 6     while(n--)
 7     {
 8         int c;
 9         scanf("%d",&c);
10         if(a==0)
11         {a++;b=c;}
12         else
13         {
14             if(b==c)
15             a++;
16             else
17             a--;
18         }
19     }
20     printf("%d\n",b);
21 }
22 int main()
23 {
24     init();
25     return 0;
26 }
时间: 2024-12-10 17:11:34

BZOJ2456的相关文章

【bzoj2456】 mode

http://www.lydsy.com/JudgeOnline/problem.php?id=2456 (题目链接) 只看了一眼,直觉便告诉我这是水题.于是跟某码农打赌说10分钟做出来叫爸爸,结果输了... 题意:给你一个n个数的数列,其中某个数出现了超过n div 2次即众数,请你找出那个数.空间限制1mb. solution  此题乃鬼题一道,鉴定完毕.  题目要求求众数,而众数x在整个数列中出现了超过n div 2次,那么我们可以发现,整个数列中众数x的个数一定超过n div 2次,也就

【BZOJ2456】mode 神奇的卡内存题

以后把题解放在前面,估计没人看题解先看题... 内存1M,4个int(其实对内存的概念十分模糊),众数即为出现次数最多的数,可以用抵消的思想(但是众数不是可以是一大坨么...) 1 #include <cstdio> 2 using namespace std; 3 int now,n,a,t; 4 int main() 5 { 6 scanf("%d",&n); 7 for (int i=1;i<=n;i++) 8 { 9 scanf("%d&qu

[BZOJ2456] mode

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 鸣谢 黄祎程 Solution 历

BZOJ2456 Mode &amp; zju2132 The Most Frequent Number

题目 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. 代码 MLE的map= = 本来还以为用个map可以划划水过了 1M内存= =数据应该是专门卡map的 #i

BZOJ2456: mode(trick乱搞QWQ)

Description 给你一个n个数的数列,其中某个数出现了超过n div 2次即众数,请你找出那个数. Input 第1行一个正整数n.第2行n个正整数用空格隔开. Output 一行一个正整数表示那个众数. Sample Input 53 2 3 1 3 Sample Output 3 HINT 100%的数据,n<=500000,数列中每个数<=maxlongint. Solve: 首先,鬼知道我bits...在BZOJ被MLE了... 然后,如果有众数,那么这个数出现的次数一定>

bzoj千题计划171:bzoj2456: mode

http://www.lydsy.com/JudgeOnline/problem.php?id=2456 任意删除序列中两个不同的数,众数仍然是众数 不停的删,剩下的最后的数一定是众数 具体实现: 记录一个当前数和出现次数 如果下一个数和当前数不相等,出现次数-1 当出现次数变为0时,当前数换为下一个数 #include<cstdio> int main() { int n,sum=0,x,last; scanf("%d",&n); while(n--) { sca

大神刷题表

9月27日 后缀数组:[wikioi3160]最长公共子串 dp:NOIP2001统计单词个数 后缀自动机:[spoj1812]Longest Common Substring II [wikioi3160]最长公共子串 [spoj7258]Lexicographical Substring Search 扫描线+set:[poj2932]Coneology 扫描线+set+树上删边游戏:[FJOI2013]圆形游戏 结论:[bzoj3706][FJ2014集训]反色刷 最小环:[poj1734

2456: mode

2456: mode Time Limit: 1 Sec  Memory Limit: 1 MBSubmit: 4798  Solved: 2009[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 HI

20160403~20160409

20160405: 1.bzoj1306 http://www.lydsy.com/JudgeOnline/problem.php?id=1306 1 #include <cstdio> 2 #include <algorithm> 3 #include <cstring> 4 #define inc(i,j,k) for(int i=j;i<=k;i++) 5 using namespace std; 6 7 int s2[10],ans[10],tot,n,s