「洛谷P2397」 yyy loves Maths VI (mode) 解题报告
P2397 yyy loves Maths VI (mode)
题目背景
自动上次redbag用加法好好的刁难过了yyy同学以后,yyy十分愤怒.他还击给了redbag一题,但是这题他惊讶的发现自己居然也不会,所以只好找你
题目描述
udp2:第一题因为语言性质问题,比赛结束后将所有c/c++的程序的内存调为2.2mb后重测。
他让redbag找众数
他还特意表示,这个众数出现次数超过了一半
一共n个数,而且保证有
n<=2000000
而且每个数<2^31-1
输入输出格式
输入格式:
第一行一个整数n
第二行n个整数
输出格式:
一行,这个众数
输入输出样例
输入样例#1:
5
2 3 3 3 3
输出样例#1:
3
说明
时间限制 1s
空间限制 3.5M(你没看错3.5M)
有人想水过,但我告诉你这空间是不够的
//kkksc03偷偷地说:你随便输出一个数字吧,都有1/2的几率。不过这可是乐多赛,值得不值得你看着办。所以最好想一想正解。
思路
题目意思很简单,就是求众数。然鹅,,,,,空间贼小,,,,
这里的突破口就是这个众数出现次数超过了一半
,所以我们可以运用一种神奇的方法。
我们不断将两个不同的数字删去,最后剩下的数肯定相同的,它就是众数。
为什么呢?假设最坏的情况——都是众数与其它数一起删去,但是这个众数出现次数超过了一半
,所以众数不可能全部被消去,剩下的数就是众数。如果非众数与非众数相消去,众数剩下的会更多,会更优。
这好像叫摩尔投票法。
代码
#include<bits/stdc++.h>
using namespace std;
int n, a, b, t;
int main(){
scanf( "%d", &n );
scanf( "%d", &a ); b = 1;
for ( int i = 2; i <= n; ++i ){
scanf( "%d", &t );
if ( t == a ) b++;
else if ( b ) b--;
else a = t, b = 1;
}
printf( "%d\n", a );
return 0;
}
拓展
摩尔投票算法可以拓展到 出现次数超过1/3,甚至1/k的情况。
只要把一次消掉2个数改成消掉k个数就可以了。
「洛谷P2397」 yyy loves Maths VI (mode) 解题报告的更多相关文章
- 洛谷 P2397:yyy loves Maths VI (mode)(摩尔投票算法)
题目背景 自动上次redbag用加法好好的刁难过了yyy同学以后,yyy十分愤怒.他还击给了redbag一题,但是这题他惊讶的发现自己居然也不会,所以只好找你 题目描述 [h1]udp2:第一题因为语 ...
- 「洛谷P1306」斐波那契公约数 解题报告
P1306 斐波那契公约数 题目描述 对于Fibonacci数列:1,1,2,3,5,8,13......大家应该很熟悉吧~~~但是现在有一个很"简单"问题:第n项和第m项的最大公 ...
- 洛谷P2397 yyy loves Maths VI (mode)
P2397 yyy loves Maths VI (mode) 题目背景 自动上次redbag用加法好好的刁难过了yyy同学以后,yyy十分愤怒.他还击给了redbag一题,但是这题他惊讶的发现自己居 ...
- bzoj2456 / P2397 yyy loves Maths VI (mode)
P2397 yyy loves Maths VI (mode) 神奇的摩尔投票法(大雾) 保证众数个数大于一半. 两两相消,剩下的那个必定是众数. 我们只要开2个变量,一个存个数,一个存值即可. (l ...
- 「区间DP」「洛谷P1043」数字游戏
「洛谷P1043」数字游戏 日后再写 代码 /*#!/bin/sh dir=$GEDIT_CURRENT_DOCUMENT_DIR name=$GEDIT_CURRENT_DOCUMENT_NAME ...
- [洛谷2397]yyy loves Maths VI
题目背景 自动上次redbag用加法好好的刁难过了yyy同学以后,yyy十分愤怒.他还击给了redbag一题,但是这题他惊讶的发现自己居然也不会,所以只好找你 题目描述 他让redbag找众数他还特意 ...
- 「洛谷4197」「BZOJ3545」peak【线段树合并】
题目链接 [洛谷] [BZOJ]没有权限号嘤嘤嘤.题号:3545 题解 窝不会克鲁斯卡尔重构树怎么办??? 可以离线乱搞. 我们将所有的操作全都存下来. 为了解决小于等于\(x\)的操作,那么我们按照 ...
- 「洛谷3338」「ZJOI2014」力【FFT】
题目链接 [BZOJ] [洛谷] 题解 首先我们需要对这个式子进行化简,否则对着这么大一坨东西只能暴力... \[F_i=\sum_{j<i} \frac{q_iq_j}{(i-j)^2}-\s ...
- 「BZOJ2733」「洛谷3224」「HNOI2012」永无乡【线段树合并】
题目链接 [洛谷] 题解 很明显是要用线段树合并的. 对于当前的每一个连通块都建立一个权值线段树. 权值线段树处理操作中的\(k\)大的问题. 如果需要合并,那么就线段树暴力合并,时间复杂度是\(nl ...
随机推荐
- ROS通过图形化界面控制和查看小乌龟参数
ROS图形化界面能够让我们快速开发ROS,也有利于我们观测数据. 下面介绍一下利用图形化界面控制小乌龟按照指令行进和查看小乌龟的行进参数. 首先我们需要做一些准备工作: 在Terminal中运行以下命 ...
- HZOJ 矩阵游戏
大水题一个,然而由于两颗线段树的阴影我死了…… 算法一:对于50%的数据: 送分,直接一个一个乘,时间复杂度O(KN). 算法二:对于80%的数据:如果我们不一个一个乘,将第i行的和乘x ,第j列的和 ...
- HZOI20190714 T1序列
什么沙雕题啊……考察的是啥啊,分类咋搞啊……愁死我了…… 先把作者的正解放出来: 序列因为选出的一段是一个等比序列的子序列,我们分为两种情况:1. q=1,相当于找一个最长每个数都相等的子串,这个扫一 ...
- java el表达式报空指针异常(nullpointexception)
最近在使用el表达式的时候,用到了int型变量,因为,很多时候,变量不会被赋初值,后面考虑了下,应该将声明由int 改为integer,改了之后就一直报空指针异常,后面仔细查看,我的getter和se ...
- 【机器学习】【条件随机场CRF-2】CRF的预测算法之维特比算法(viterbi alg) 详解 + 示例讲解 + Python实现
1.CRF的预测算法条件随机场的预测算法是给定条件随机场P(Y|X)和输入序列(观测序列)x,求条件概率最大的输出序列(标记序列)y*,即对观测序列进行标注.条件随机场的预测算法是著名的维特比算法(V ...
- 怎样判断一个jquery对象是否为空jquery对象
if ( $('#myDiv').length ){} http://stackoverflow.com/questions/47... 也可以直接判断$('#myDiv')[0]===undefin ...
- uni-app 常用框架内置方法 更新中 .....
获取 登录信息,getStorage 初始化页面数据 请求 下拉刷新页面 加载更多 点击跳转 个人中心 uni.request(OBJECT) success=成功 fail=失 ...
- Python--day45--pymysql模块初识以及SQL注入
pymysql模块学习路径:增删改的时候一定要conn.commit() pymysql模块实现登录功能: import pymysql user = input("username:&qu ...
- 模板——Treap实现名次树
Treap 是一种通过赋予结点随机权值的一种满足堆性质的二叉搜索树,它很好的解决了二叉搜索树顺序插入组成链式的局限性. 名次树是指在treap的每个结点中添加附加域size,表示以它为根的子树的总结点 ...
- 【codeforces 761D】Dasha and Very Difficult Problem
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...