问题标题: 高考成绩

0
0
已解决
叶子煊
叶子煊
中级光能
中级光能
题目描述

2018年全国参加高考人数达975万,高考总分750分。现给出某个范围(小组,班级,学校,区,市,省等)参考高考的人数n,以及每一个人的高考成绩,请统计输出哪个分数的人最多。



程序输入说明

2行,第一行一个正整数n,表示参加高考人数;第二行为高考成绩。

程序输出说明

2行,第一行一个正整数,为最多的人得到的分数;第二行一个正整数,为得到这个分数的人数。如果两个分数的人数一样,输出分数较大的那个。

程序输入样例

5
695 680 702 630 695
程序输出样例

695
2
数据范围及提示

1<=n<=1000000,0<每个分数都是正整数<=750。

这是我写的代码,我用了筒排,还是超时

。。。。。

#include<iostream>
using namespace std;
long long a[1000001],b[1001],n,fs,rs;
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		b[a[i]]++;
	}
	for(int i=750;i>=2;i++)
	{
		if(b[i]>b[i-1])
		{
			fs=i;
			rs=b[i]; 
		}
	}
	cout<<fs<<endl<<rs;
}

错在哪啊

DALAO找找错,哈

叶子煊在2018-08-10 13:37:22追加了内容

还需要回答我用筒排为什么会超时哦

DALAO们

fighting!!!!


0
已采纳
王欣怡
王欣怡
新手光能
新手光能

说实话我做对了,不过没用排序。。。

上答案!

wait......

首先,要用格式化输入输出。

要找最大值:

    long long n,c[1000001],a[1000001],maxn,a1;//定义,不懂往下看
    cin>>n;//可以不用scanf
    for(int i=1;i<=n;i++)
    {
        输入a[i];//scanf
        c[a[i]]++;//类似桶排思想
    }
    for(int i=1;i<=n;i++)
    {
        if(c[a[i]]>=maxn)//判断这个数有没有比最大值大
        {
            if(c[a[i]]==maxn)//如果等于
            {
                maxn=max(c[a[i]],maxn);//谁大输出哪个
                a1=max(a[i],a1);
            }
            else//否则
            {
                maxn=c[a[i]];//直接赋值就行
                a1=a[i];    
            }

        }
    }
    输出a1;(换行)//printf
    输出maxn;//printf

望采纳,我急需酷町豆

1
蒋智航
蒋智航
高级天翼
高级天翼

@赵逸凡 桶排也挺快的,快排O(nlog^2n),也相差无几

1
贾文卓
贾文卓
高级光能
高级光能

不要排序,边输入边和最优解作比较就行了。时间复杂度O(n)。

贾文卓在2018-08-10 13:57:54追加了内容

对不起,看错题目了,请忽略......

0
0
赵逸凡
赵逸凡
初级启示者
初级启示者

铜排范围有限,用sort

0
叶子煊
叶子煊
中级光能
中级光能

有DALAO知道吗

fighting

 

0
我要回答