zoukankan      html  css  js  c++  java
  • hdu 1425 sort 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1425

         常规的方法是对输入的数从大到小进行排序(可以用sort或qsort),然后输出前m大的数。

         不过此题实质上是hash的入门题。建立一个比较大的数组,然后把这些数通过hash函数计算映射到这个数组里面(这里hash函数是 tmp + 500000,tmp是输入的n个数中任意的一个数),考虑到这些数是各不相同的,因此不需要考虑冲突问题。

       

     1 #include <iostream>
     2 #include <string.h>
     3 using namespace std;
     4 
     5 const int maxn = 1e6 + 5;
     6 int hash[maxn];    // 因为数据范围是-500000~500000,因此1e6的大小即能够存储所有的数
     7 
     8 int main()
     9 {
    10     int i, n, m, tmp;
    11     while (scanf("%d%d", &n, &m) != EOF)
    12     {
    13         memset(hash, 0, sizeof(hash));
    14         for (i = 0; i < n; i++)
    15         {
    16             scanf("%d", &tmp);
    17             hash[tmp+500000] = 1;   // 把该数映射去hash数组里之后要做标记,为下面的查找做准备
    18         }
    19         for (i = maxn-5; i >= 0; i--)
    20         {
    21             if (hash[i])
    22             {
    23                 m--;
    24                 if (m)
    25                     printf("%d ", i-500000);
    26                 else
    27                 {
    28                     printf("%d\n", i-500000);      // 一旦前m个数全部输出来之后,就退出循环
    29                         break;
    30                 }
    31             }
    32         }
    33     }
    34     return 0;
    35 }
    36 
    37         
  • 相关阅读:
    二阶注入
    ACCESS延时注入
    宽字节注入源码
    Sqli-LABS通关笔录-14
    Sqli-LABS通关笔录-13
    Sqli-LABS通关笔录-12
    PHP学习路线
    华科机考:二叉排序树
    华科机考:打印日期
    华科机考:A+B
  • 原文地址:https://www.cnblogs.com/windysai/p/3334876.html
Copyright © 2011-2022 走看看