avatar
fireworks99
keep hungry keep foolish

HDU 1425 sort 重温

Description

n个不同整数,从大到小输出前m个

数字多达百万,sort定然超时

我们在数轴上将输入的n个数字标记,从后向前遍历输出即可

这样省去了sort的时间,只要遍历的时间

Code

#include <map>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;

//int main()
//{
//    int n, m, tem;
//    while(~scanf("%d%d", &n, &m))
//    {
//        map<int, bool> mp;
//        for(int i = 0; i < n; ++i)
//        {
//            scanf("%d", &tem);
//            mp[tem] = 1;
//        }
//        int cnt = 0;
//        for(int i = 500000; i >= -500000 && cnt < m; --i)
//            if(mp[i])
//            {
//                cout << i << ' ';
//                cnt++;
//            }
//        cout << '\n';
//    }
//    return 0;
//}

bool has[1000009];

int main()
{
    int n, m, tem;
    while(~scanf("%d%d", &n, &m))
    {
        memset(has, 0, sizeof(has));
        for(int i = 0; i < n; ++i)
        {
            scanf("%d", &tem);
            has[tem + 500000] = 1;
        }
        int cnt = 0;
        for(int i = 1000000; i >= 0 && cnt < m; --i)
            if(has[i])
            {
                printf("%d%c", i - 500000,cnt == m - 1 ? '\n' : ' ');
                cnt++;
            }
    }
    return 0;
}

如上,我试过map,他不用坐标偏移,但更为耗时,毕竟使用哈希目的在于节约时间,所以哈希不要用map

Site by Baole Zhao | Powered by Hexo | theme PreciousJoy