2456: mode

2456: mode

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

HINT

100%的数据,n<=500000,数列中每个数<=maxlongint。

zju2132 The Most Frequent Number

Source

鸣谢 黄祎程

/*
 * Author: lyucheng
 * Created Time:  2017年05月14日 星期日 17时17分40秒
 * File Name: /media/lyucheng/Work/ACM源代码/数学--数论/乱搞/BZOJ-2456.cpp
 */
/* 题意:给你一个n个数的序列,ai<=longmaxint,然后让你求出出现次数超过 n/2的众数
 *
 * 思路:map映射不可行,可以离散化优化一下,还是超时,可能不是超时的问题,应该是超内存,显然500000个LL开数组肯定会超时的
 *      所以不能开数组,看了题解才发现这个神奇的算法,众数肯定是出现次数最多的那个数,现在让所有不相同的数进行两两抵消
 *      那么剩下的肯定是数量最多的那一个了
 * */
#include <cstdio>
int n;
int x;
int now;//当前遍历到的数
int res;//表示现在相同的数的数量
int main()
{
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout;
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&x);
        if(x==now) res++;//如果两个数相等,那么相等的数量+1
        else if(res==0){//如果当前没有相等的数了
            now=x;res=1;
        }else res--;//不相等就-1
    }
    printf("%d\n",now);
    return 0;
}
时间: 2024-10-12 15:12:34

2456: mode的相关文章

poj 2456 Aggressive cows

题目链接:http://poj.org/problem?id=2456 题目大意:给你n个坐标,求c个坐标中最小的最大距离. 思路:这题跟poj3273有点是差不多的方法,不过要先把坐标排序,然后用在最短距离跟最大距离之间进行查找,每次二分判断最小距离为mid的个数 code: #include<cstdio> #include<iostream> #include<cmath> #include<algorithm> #include<cstring

BZOJ 2456 杂题 卡内存

2456: mode Time Limit: 1 Sec  Memory Limit: 1 MBSubmit: 3702  Solved: 1551[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

POJ 2456 Aggressive cows (二分 基础)

Aggressive cows Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7924   Accepted: 3959 Description Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stalls are located along a straight line at positions x1,...

POJ 2456 Aggressive cows(二分)

题目链接:http://poj.org/problem?id=2456 题意:有一排n个牛舍,坐标分别为xi,有m头牛,希望尽可能把他们之间分开,求他们之间最近的两头牛之间的距离最大可以拉到多少.这是二分中最大化最小值的题目,英文的题目又最大又最小有的人不易理解. 思路:显然两头最近的牛的距离太大将没有一种方式安置在牛舍中,两头最近的牛距离越小就越能放置在牛舍中,所以用把答案二分出来,每个mid要模拟放置暴力下可不可以放得下. //532K 188MS #include<cstdio> #in

二分搜索 POJ 2456 Aggressive cows

题目传送门 1 /* 2 二分搜索:搜索安排最近牛的距离不小于d 3 */ 4 #include <cstdio> 5 #include <algorithm> 6 #include <cmath> 7 using namespace std; 8 9 const int MAXN = 1e5 + 10; 10 const int INF = 0x3f3f3f3f; 11 int x[MAXN]; 12 int n, m; 13 14 bool check(int d)

poj 2456 Aggressive cows,二分,最大化最小值

描述 农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小隔间依次编号为x1,...,xN (0 <= xi <= 1,000,000,000). 但是,John的C (2 <= C <= N)头牛们并不喜欢这种布局,而且几头牛放在一个隔间里,他们就要发生争斗.为了不让牛互相伤害.John决定自己给牛分配隔间,使任意两头牛之间的最小距离尽可能的大,那么,这个最大的最小距离是什么呢? 输入 有多组测试数据,以EOF结束. 第

poj 2456 二分法 最大化最小值

题目:http://poj.org/problem?id=2456 重新练习下二分法,发现还是手速不够 从这道题学到一下几点: 1.线性分几段的方法,看我的Judge()代码: 2.二分的while()最终打印的是down,而不是mid(我代码里写的是ans),或者up, 这么想:跳出循环的时候,假设while里的判断,Judge(ans)==1,那么down是正确解,up不是 Judge(ans)==0,那么ans跟up都不是正确解 综上,打印down才能输出正确解 3.调了好一会二才发现的b

POJ 2456 Aggressive cows---二分搜索法

///3.最大化最小值 /** POJ 2456 Aggressive cows Q:一排牛舍有N (2 <= N <= 100,000) 个,位置为x1,...,xN (0 <= xi <= 1,000,000,000) 为使牛之间不受到伤害,需最大化他们之间的距离,求最大化最近两头牛之间的距离 共M只牛 A: 条件C(x):可以使得最近两头牛之间的距离不小于d->求满足条件的最大d->如何高效的判断C(x) */ #include"iostream&quo

poj 2456 最小值最大化

http://poj.org/problem?id=2456 Description Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stalls are located along a straight line at positions x1,...,xN (0 <= xi <= 1,000,000,000). His C (2 <= C <= N) cows