解题思路
观察一下数据范围就会发现,分数的范围非常小。。于是就顺理成章的想到了桶排。
思路非常简单,而且不存在超时。没什么好说的,就出示代码了!
PS:也不知道考场为什么脑抽没想到桶排??然后莫宁奇妙的打了个插排??
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iomanip>
using namespace std;
int n,w,t,x,a[2000],b[200000];
int main(){
scanf("%d%d",&n,&w);
for(int i=1;i<=n;i++)
if(i*w/100>1)
b[i]=i*w/100;
else b[i]=1;
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
a[x]++;
t=0;
for(int j=600;j>=0;j--)
{
t+=a[j];
if(t>=b[i])
{
printf("%d ",j);
break;
}
}
}
}