题解 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;
}
不要妄图追上西坠的太阳,而是要在黎明前就等着它!