hdu 1425 题讲解

  委屈


//虽然是水题,可是过程中却出现很多问题,解析如下:
#include<iostream>
#include<algorithm>
using namespace std;
int a[1000003];//不能在main函数当中定义这么大的数组,否则系统运行不出来
int main()
{
    int n,m,i;
 while(cin>>n>>m)
 {
  for(i=0;i<n;i++)
  {
   scanf("%d",&a[i]);//输入和输出用scanf和printf,可节省一半时间,否则超时
  }
  sort(a,a+n);
  for(i=n-1;i>=0;i--)
  {
   if(i==n-m-1)break;
   if(i!=n-1)//格式控制
   printf(" ");
   printf("%d",a[i]);   
  }
       printf("\n");
 }
 
 return 0;
}


/*
#include <stdio.h>
#include <string.h>
#define      MAX 1000002
int data[MAX];
int main(void)
{
int m,n,i,temp,num_out;
while (scanf("%d%d",&n,&m)!=EOF)
{
   memset(data,0,sizeof(data));
   for(i=0;i<n;i++)
   {
    scanf("%d",&temp);
    data[temp+500000]++;
   }
   num_out=0;
   for(i=MAX-1;i>0&&m>0;i--)
   {
    while(data[i]--) //因为是题目数据各不相同,也可以直接使用if
    {
     printf("%d",i-500000);
     num_out++;
     if(num_out==m)
      break;
     else printf(" ");
    }
    if(num_out==m) break;
   }
   printf("\n");
}
return 0;
}
#include<cstdio>

#include<iostream>

#include<algorithm>

#include<cmath>

#include<cstring>

using namespace std;

 

int num[1000005];

bool cmp(int a,int b)

{

return a>b;

}

 

int main()

{

int n,m;


while(scanf("%d%d",&n,&m)==2)

{

int i;

for(i=0;i<n;i++)

{

scanf("%d",&num[i]);

}

sort(num,num+n,cmp);

for(i=0;i<m;i++)

{

if(i!=0) printf(" ");

printf("%d",num[i]);

}


printf("\n");

}

 


return 0;

}

用哈希表,也就节省了300ms 汗


#include<cstdio>

#include<iostream>

#include<algorithm>

#include<cmath>

#include<cstring>

using namespace std;

 

int num[1000005];

 

 

int main()

{

int n,m;


while(scanf("%d%d",&n,&m)==2)

{

memset(num,0,sizeof(num));

int i;

for(i=0;i<n;i++)

{

int temp;

scanf("%d",&temp);

num[temp+500000]++;

}

i=1000002;

bool yes=false;

while(m)

{

while(num[i])

{

if(yes) printf(" ");

printf("%d",i-500000);

yes=true;

num[i]--;

m--;

}

i--;

}


printf("\n");

}

 


return 0;

}

*/

你可能感兴趣的:(hdu 1425 题讲解)