luogu P2397 yyy loves Maths VI (mode)

题目背景

自动上次redbag用加法好好的刁难过了yyy同学以后,yyy十分愤怒.他还击给了redbag一题,但是这题他惊讶的发现自己居然也不会,所以只好找你

题目描述

[h1]udp2:第一题因为语言性质问题,比赛结束后将所有c/c++的程序的内存调为2.2mb后重测。[/h1]

他让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的几率。不过这可是乐多赛,值得不值得你看着办。所以最好想一想正解。

数学题?求重数?这不太简单了。

可是这空间为啥只给3.5M啊,这咋写?

(自拟)看了这个题后:

IQ 25的YYF怯怯说:拿个数组把出现的记录下来,看看哪个数出现次数最多。

IQ 120的WLZ无力说:排一下序,既然重数超过一半,那么中间的位置一定是重数。

IQ 250的LXL欣然的说:这还不简单以第一个数为标准,第一个数出现次数为1,下一个数若与这个数相同,则这个数的次数+1,若不相同则-1,若做标准的数次数为零,则下个数将这个替换掉,因为重数出现次数超过了一半,所以最后剩下的那个标准数,只能是重数。

WLZ的代码:

#include<bits/stdc++.h>
using namespace std;
int a[2000001],n;
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    sort(a+1,a+1+n);
    cout<<a[n/2];
}

LXL的代码:

#include<bits/stdc++.h>
using namespace std;
int n,flag,x,cnt,now;
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&x);
        if(cnt==0)now=x,cnt++;
        else
        {
            if(now==x)
            {
                cnt++;
            }
            else cnt--;
        }
    }
    printf("%d",now);
}

此为个人略解,转载请标明出处:http://www.cnblogs.com/rmy020718/p/8835352.html

原文地址:https://www.cnblogs.com/rmy020718/p/8835352.html

时间: 2024-08-27 05:42:47

luogu P2397 yyy loves Maths VI (mode)的相关文章

【题解】Luogu P2397 yyy loves Maths VI (mode)

problem 很有意思的一道题 Solution 初看此题毫无头绪,2.2mb太丧心病狂了 再看题目,注意到重要性质:众数个数大于一半 看完题解之后想到使用一个方法:摩尔投票法 摩尔投票法是啥玩意? 考虑一段序列,其中众数的个数超过一半 每一轮投票,从序列中选出两个不同的数,丢弃 无法再进行投票后,最终一定剩下大于等于一个全部相同的数,即众数 会不会有剩两种或以上不同的数? 不会.根据定义,此时我们还可以再进行一次投票 很好,可是要怎么用到题目上面? 十分极限的空间限制要求我们的算法空间复杂度

洛谷——P2393 yyy loves Maths II

P2393 yyy loves Maths II 题目背景 上次蒟蒻redbag可把yyy气坏了,yyy说他只是小学生,蒟蒻redbag这次不坑他了. 题目描述 redbag给了yyy很多个数,要yyy计算这些数的和.必须要快,redbag只给了yyy1秒的时间!!! 输入输出格式 输入格式: 一行,很多个数 输出格式: 一行,一个实数(四舍五入精确到5位小数),表示这些数的和. 输入输出样例 输入样例#1: 复制 1 输出样例#1: 复制 1.00000 说明 [数据规模] 对于100%的数据

洛谷 P2393 yyy loves Maths II

P2393 yyy loves Maths II 题目背景 上次蒟蒻redbag可把yyy气坏了,yyy说他只是小学生,蒟蒻redbag这次不坑他了. 题目描述 redbag给了yyy很多个数,要yyy计算这些数的和.必须要快,redbag只给了yyy1秒的时间!!! 输入输出格式 输入格式: 一行,很多个数 输出格式: 一行,一个实数(四舍五入精确到5位小数),表示这些数的和. 输入输出样例 输入样例#1: 复制 1 输出样例#1: 复制 1.00000 说明 [数据规模] 对于100%的数据

luogu2393 yyy loves Maths II

使用long double #include <iostream> #include <cstdio> using namespace std; long double ans=0.0, xx; int main(){ while(scanf("%Lf", &xx)!=EOF) ans = ans + xx * 1000000; printf("%.5Lf", ans/1000000); return 0; } 原文地址:https:

[洛谷1580]yyy loves Easter_Egg I

题目背景 Soha的出题效率着实让人大吃一惊.OI,数学,化学的题目都出好了,物理的题还没有一道.于是,Huntfire,absi2011,lanlan对soha进行轮番炸,准备炸到soha出来,不料,人群中冲出了个kkksc03…… 题目描述 yyy loves OI(Huntfire),yyy loves Maths(lanlan),yyy loves Chemistry(absi2011)对yyy loves Physics(soha)进行轮番炸,轰炸按照顺序进行,顺序为Huntfire,

yyy loves Easter_Egg I(恶心的字符串模拟)

题目背景 Soha的出题效率着实让人大吃一惊.OI,数学,化学的题目都出好了,物理的题还没有一道.于是,Huntfire,absi2011,redbag对soha进行轮番炸,准备炸到soha出来,不料,人群中冲出了个kkksc03…… 题目描述 yyy loves OI(Huntfire),yyy loves Maths(redbag),yyy loves Chemistry(absi2011)对yyy loves Physics(soha)进行轮番炸,轰炸按照顺序进行,顺序为Huntfire,

[洛谷P1580]yyy loves Easter_Egg I

题目大意:很多人@一个人,如果那个人忍不住说话了,就轰炸成功,如果那个人没说话或者别的人没有@他或@很多个人,则轰炸失败.(具体见原题) 解题思路:字符串处理,好好用sscanf即可(细节见代码). C++ Code: #include<cstring> #include<algorithm> #include<cstdio> char s[1050],zha[1050],shuohua[1050],At[1050]; int q=1; int main(){ fget

bzoj3561DZY Loves Math VI

3561: DZY Loves Math VI Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 503  Solved: 333[Submit][Status][Discuss] Description 给定正整数n,m.求 Input 一行两个整数n,m. Output 一个整数,为答案模1000000007后的值. Sample Input 5 4 Sample Output 424 HINT 数据规模: 1<=n,m<=500000,共有3

[P1580] yyy loves Easter_Egg I

Link: P1580 传送门 Solution: 拿来练练字符串的读入: 1.$gets()$相当于$c++$中的$getline()$,但返回值为指针!(无数据时为NULL) (都读入换行符,并将其舍弃) 2.$sscanf(起始指针,.....,......)$可以实现从另一个字符串读入 3.$strcmp$和$memcmp$都是相同时返回值为0 4.$count(begin,end,value)$能实现各个容器中的个数查找 5.$strstr(s1,s2)$能查找$s1$中第一个$s2$