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。

正解:。。。

解题报告:

  首先题目要求的是出现次数大于n/2的数,显然这个数的出现次数比别的数都要多,那么我们可以考虑用这个数独特的超多的出现次数来得到这个数。

  因为超过一半,不妨考虑一定会大于其他所有数的个数之和。那么我们每得到一个数,就与之前保存的数(即当前出现次数最多且未被抵消的数)比较,如果与之前的不同,tot--,相当于是抵消了一个。如果发现tot=0,那么说明之前的数字耗尽了,那么我们把新的读进来的数作为新的保存的数就可以了。

  神奇的地方就在于这个抵消操作。最后得到的数字一定会是众数。

  然而我开始MLE了2发,头文件开多了。。。

 #include <cstdio>
using namespace std;
int n,now,now_tot,cun;
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++) {
scanf("%d",&now);
if(now_tot==) { now_tot=; cun=now; }
else if(now==cun) now_tot++;
else now_tot--;
}
printf("%d",cun);
return ;
}

BZOJ2456 mode的更多相关文章

  1. 【bzoj2456】 mode

    http://www.lydsy.com/JudgeOnline/problem.php?id=2456 (题目链接) 只看了一眼,直觉便告诉我这是水题.于是跟某码农打赌说10分钟做出来叫爸爸,结果输 ...

  2. 【Bzoj2456】mode

    Position: http://www.lydsy.com/JudgeOnline/problem.php?id=2456 List Bzoj2456 mode List Description S ...

  3. 【BZOJ2456】mode 神奇的卡内存题

    以后把题解放在前面,估计没人看题解先看题... 内存1M,4个int(其实对内存的概念十分模糊),众数即为出现次数最多的数,可以用抵消的思想(但是众数不是可以是一大坨么...) #include &l ...

  4. bzoj2456

    有趣的题目 空间1mb,所以开数组的算法就不要想了(我一开始没看到……) 仔细读题,然后发现这里他限定众数为出现超过n div 2次 也就是说,这个数可以对应每一个不相同的数消掉,最终还剩下这个数 也 ...

  5. bzoj2456 mode (思路)

    不能把数存下来. 于是来打擂台,如果新数和他不相等,cnt--,否则cnt++.如果cnt<=0了,那个新数就来把它顶掉,然后把cnt重置成1 最后在台上的就是那个次数大于N/2的众数 (连&l ...

  6. bzoj千题计划171:bzoj2456: mode

    http://www.lydsy.com/JudgeOnline/problem.php?id=2456 任意删除序列中两个不同的数,众数仍然是众数 不停的删,剩下的最后的数一定是众数 具体实现: 记 ...

  7. bzoj2456 / P2397 yyy loves Maths VI (mode)

    P2397 yyy loves Maths VI (mode) 神奇的摩尔投票法(大雾) 保证众数个数大于一半. 两两相消,剩下的那个必定是众数. 我们只要开2个变量,一个存个数,一个存值即可. (l ...

  8. 【神奇の做法】bzoj2456 mode

    题解:http://www.tuicool.com/articles/BfQBzif #include<cstdio> using namespace std; int n,x,ans,t ...

  9. [BZOJ2456] mode(一道很有意思的题)

    传送门 看到这个题的第一反应是离散化+线段树乱搞.. eeeeeeeeeeee感觉数据结构学傻了,其实直接存下来,sort一遍,n/2的位置的就是答案 当然前提是空间够的话 1m的空间连数组都开不下 ...

随机推荐

  1. 第11章 Windows线程池(1)_传统的Windows线程池

    第11章 Windows线程池 11.1 传统的Windows线程池及API (1)线程池中的几种底层线程 ①可变数量的长任务线程:WT_EXECUTELONGFUNCTION ②Timer线程:调用 ...

  2. C# using 三种使用方式 C#中托管与非托管 C#托管资源和非托管资源区别

    1.using指令.using + 命名空间名字,这样可以在程序中直接用命令空间中的类型,而不必指定类型的详细命名空间,类似于Java的import,这个功能也是最常用的,几乎每个cs的程序都会用到. ...

  3. Java 数据类型和变量

    1.1 基本类型与引用类型的区别 1.基本类型代表简单的数据类型,比如整数和字符,引用类型所引用的实例能表示任意一种复杂的数据类型. 2.基本类型仅表示数据类型,而引用类型所引用的实例除了表示复杂数据 ...

  4. 12Spring_AOP编程(AspectJ)_前置通知

    接下里的博客会一篇一篇的讲解每一个通知.其实AOP_AspectJ的编程与传统的AOP的编程的最大的区别就是写一个Aspect 支持多个Advice和多个PointCut .而且我们写AOP_Aspc ...

  5. 24Spring_事务管理机制

    第一部分:Spring事务管理高层抽象接口 我们介绍三个接口:1.PlatformTransactionManager 2.TransactionDefinition  3.TransactionSt ...

  6. [资料]pthreads PHP

    1. 参考手册http://php.net/manual/zh/book.pthreads.php 2. windows下安装php真正的多线程扩展pthreads教程http://www.think ...

  7. 使用ConfigurationManager类读写配置文件

    使用ConfigurationManager类 读写配置文件app.config,以下为代码: view plaincopy to clipboard print? using System; usi ...

  8. Web 服务编程,REST 与 SOAP(转)

    原文地址:Web 服务编程,REST 与 SOAP REST 简介 在开始我们的正式讨论之前,让我们简单看一下 REST 的定义. REST(Representational State Transf ...

  9. Web fonts

    不同类型的文件字体: Embedded OpenType (glyphicons-halflings-regular.eot) Scalable Vector Graphics (glyphicons ...

  10. EntityFramework中Mapper怎么定义联合主键?

    HasKey(m => new { m.StoreId, m.CarTypeId, m.CarLevel}) 用“new {}”联合主键以“,”分隔形式定义