题解 2020 CSP-J组 T2 【直播评奖(live)】

Description

题号 出处 参考难度 \(AC\)时间及记录
\(\texttt{洛谷P7072}\) \(\texttt{2020-CSP-J组-T2}\) \(\texttt{洛谷难度:普及-}\) \(\texttt{On 2020/11/08}\)

Solution

总览一下

总览一下:
首先,这是一道普及组的\(T2\)是吧。
我在考场上脑抽了一下,写了个\(85\)分算法\(\cdots\)
我后来才发现,我的\(\mathcal{O(N^2)}\)会过不去最后一个\(Subtask\)
追悔莫及!

85pts做法

我在考场上是这样做的:
每次输入一个数后,找到他在目前这些数中的位置,插进去。
其实很像插入排序。
时间复杂度是\(\mathcal{O(N^2)}\)的。

100pts做法

后来,我是这样订正的:
开一个\(Array[601]\)统计每一个分数有多少人。
每次找到那个刚好大于入选人数的即可。
其实就是一个桶排序。
时间复杂度是\(\mathcal{O(600×N)}\)的。

Code

#include<bits/stdc++.h>
using namespace std;
int Total,Can;
int Source[100001];
int Array[601];
int main()
{
	freopen("live.in","r",stdin);
	freopen("live.out","w",stdout);
	register int i,j;
	cin>>Total>>Can;
	for(i=1;i<=Total;i++)
	{
		scanf("%d",&Source[i]);
		register int Used;
		Used=max(1,(int)(1.0*i*Can/100));
		Array[Source[i]]++;
		register int Sum;
		Sum=0;
		for(j=600;j>=0;j--)
		{
			Sum+=Array[j];
			if(Sum>=Used)
			{
				printf("%d ",j);
				break;
			}
		}
	}
	printf("\n");
	return 0;
}

posted @ 2020-11-08 20:19  Bushuai_Tang  阅读(291)  评论(0编辑  收藏  举报