HDU 1425 sort
2017-05-18 11:13
330 查看
[align=left]Problem Description[/align]
给你n个整数,请按从大到小的顺序输出其中前m大的数。
[align=left]Input[/align]
每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数。
[align=left]Output[/align]
对每组测试数据按从大到小的顺序输出前m大的数。
[align=left]Sample Input[/align]
5 3
3 -35 92 213 -644
[align=left]Sample Output[/align]
213 92 3
Hint请用VC/VC++提交
[align=left]Author[/align]
LL
[align=left]Source[/align]
ACM暑期集训队练习赛(三)
[align=left]Recommend[/align]
linle
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
基数排序~
其实sort就能过,只是想写一下基数排序罢了~
然后,刚开始用基数排序,桶排序和快排都T了……因为用了读入优化……什么情况?
基数排序:
#include<cstdio>
int n,m,jin,x,a[1000001],b[1000001],c[10][1000001],q[1000001],kkz;
int main()
{
while(~scanf("%d%d",&n,&m))
{
jin=1;a[0]=b[0]=q[0]=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
if(x<0) b[++b[0]]=-x;
else a[++a[0]]=x;
}
for(int i=1;i<=a[0];i++) q[++q[0]]=a[i];
for(int i=1;i<=6;i++)
{
for(int j=0;j<10;j++) c[j][0]=0;
for(int j=1;j<=q[0];j++)
{
int now=(q[j]%(jin*10))/jin;
c[now][++c[now][0]]=q[j];
}
q[0]=0;jin*=10;
for(int j=0;j<=9;j++)
for(int k=1;k<=c[j][0];k++) q[++q[0]]=c[j][k];
}
printf("%d",q[q[0]]);kkz=q[0];
for(int i=2;i<=m && i<=q[0];i++) printf(" %d",q[q[0]-i+1]);
if(q[0]>=m)
{
puts("");continue;
}
m-=q[0];q[0]=0;jin=1;
for(int i=1;i<=b[0];i++) q[++q[0]]=b[i];
for(int i=1;i<=6;i++)
{
for(int j=0;j<10;j++) c[j][0]=0;
for(int j=1;j<=q[0];j++)
{
int now=(q[j]%(jin*10))/jin;
c[now][++c[now][0]]=q[j];
}
q[0]=0;jin*=10;
for(int j=0;j<=9;j++)
for(int k=1;k<=c[j][0];k++) q[++q[0]]=c[j][k];
}
if(kkz) printf(" ");printf("%d",-q[1]);
for(int i=2;i<=m;i++) printf(" %d",-q[i]);
puts("");
}
return 0;
}
桶排序:
#include<cstdio>
#include<cstring>
#define d(u) u+500000
int n,m,a[1000001],tot,x,num;
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
tot=num=0;
memset(a,0,sizeof(a));
for(int i=1;i<=n;i++) scanf("%d",&x),a[d(x)]++;
for(int i=500000;i>=-500000 && m;i--)
if(a[d(i)]) while(a[d(i)] && m)
{
if(!num) printf("%d",i),m--,a[d(i)]--,num++;
else printf(" %d",i),m--,a[d(i)]--;
}
puts("");
}
return 0;
}
给你n个整数,请按从大到小的顺序输出其中前m大的数。
[align=left]Input[/align]
每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数。
[align=left]Output[/align]
对每组测试数据按从大到小的顺序输出前m大的数。
[align=left]Sample Input[/align]
5 3
3 -35 92 213 -644
[align=left]Sample Output[/align]
213 92 3
Hint请用VC/VC++提交
[align=left]Author[/align]
LL
[align=left]Source[/align]
ACM暑期集训队练习赛(三)
[align=left]Recommend[/align]
linle
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
基数排序~
其实sort就能过,只是想写一下基数排序罢了~
然后,刚开始用基数排序,桶排序和快排都T了……因为用了读入优化……什么情况?
基数排序:
#include<cstdio>
int n,m,jin,x,a[1000001],b[1000001],c[10][1000001],q[1000001],kkz;
int main()
{
while(~scanf("%d%d",&n,&m))
{
jin=1;a[0]=b[0]=q[0]=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
if(x<0) b[++b[0]]=-x;
else a[++a[0]]=x;
}
for(int i=1;i<=a[0];i++) q[++q[0]]=a[i];
for(int i=1;i<=6;i++)
{
for(int j=0;j<10;j++) c[j][0]=0;
for(int j=1;j<=q[0];j++)
{
int now=(q[j]%(jin*10))/jin;
c[now][++c[now][0]]=q[j];
}
q[0]=0;jin*=10;
for(int j=0;j<=9;j++)
for(int k=1;k<=c[j][0];k++) q[++q[0]]=c[j][k];
}
printf("%d",q[q[0]]);kkz=q[0];
for(int i=2;i<=m && i<=q[0];i++) printf(" %d",q[q[0]-i+1]);
if(q[0]>=m)
{
puts("");continue;
}
m-=q[0];q[0]=0;jin=1;
for(int i=1;i<=b[0];i++) q[++q[0]]=b[i];
for(int i=1;i<=6;i++)
{
for(int j=0;j<10;j++) c[j][0]=0;
for(int j=1;j<=q[0];j++)
{
int now=(q[j]%(jin*10))/jin;
c[now][++c[now][0]]=q[j];
}
q[0]=0;jin*=10;
for(int j=0;j<=9;j++)
for(int k=1;k<=c[j][0];k++) q[++q[0]]=c[j][k];
}
if(kkz) printf(" ");printf("%d",-q[1]);
for(int i=2;i<=m;i++) printf(" %d",-q[i]);
puts("");
}
return 0;
}
桶排序:
#include<cstdio>
#include<cstring>
#define d(u) u+500000
int n,m,a[1000001],tot,x,num;
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
tot=num=0;
memset(a,0,sizeof(a));
for(int i=1;i<=n;i++) scanf("%d",&x),a[d(x)]++;
for(int i=500000;i>=-500000 && m;i--)
if(a[d(i)]) while(a[d(i)] && m)
{
if(!num) printf("%d",i),m--,a[d(i)]--,num++;
else printf(" %d",i),m--,a[d(i)]--;
}
puts("");
}
return 0;
}
相关文章推荐
- HDU 1425 sort (排序)
- hdu---1425 sort
- hdu 1425 sort
- HDU-1425(sort)
- hdu 1425 sort
- hdu 1425.sort
- HDU 1425 Sort
- heap sort(hdu 1425)
- sort 1425 hdu(hash 和 sort排序)
- HDU1425:sort(哈希思想!)
- HDU 1425 sort(桶排序+哈希函数)
- HDU-1425-sort
- hdu_1425_sort ( hash 入门 )
- hdu 1425 sort
- hdu_1425 sort
- hdu 1425 sort
- HDU 1425 sort
- hdu 1425 sort
- hdu 1425 sort
- HDU 1425 sort(堆排序/快排/最大堆/最小堆)