zoukankan      html  css  js  c++  java
  • 前m大的数(哈希入门)&&sort

    http://acm.hdu.edu.cn/showproblem.php?pid=1280

    普通方法(625ms)

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    int b[3000*1501];
    int cmp(const void *a,const void *b)
    {
        return *(int *)b-*(int *)a;
    }
    int main()
    {
        int n,m;
        int a[3001];
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            int k=0;
            for(int i=0;i<n;i++)
                scanf("%d",&a[i]);
            for(int i=0;i<n;i++)
            {
                for(int j=i+1;j<n;j++)
                    b[k++]=a[i]+a[j];
            }
            qsort(b,k,sizeof(b[0]),cmp);
            printf("%d",b[0]);
            for(int i=1;i<m;i++)
            {
                    printf(" %d",b[i]);
    
            }
            printf("
    ");
        }
        return 0;
    }
    View Code

     哈希(15ms)

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    int main()
    {
        int n,m;
        int a[3001],b[10001];
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            memset(b,0,sizeof(b));
            for(int i=0;i<n;i++)
                scanf("%d",&a[i]);
            for(int i=0;i<n;i++)
            {
                for(int j=i+1;j<n;j++)
                    b[a[i]+a[j]]++;
            }
            int flag=0;
            int l=0;
            for(int i=10000;i>=0;i--)
            {
                while(b[i])
                {
                    if(flag==0)
                    {
                           printf("%d",i);
                           flag=1;
                    }
                    else printf(" %d",i);
                    b[i]--;
                    l++;
                    if(l==m) break;
                }
                if(l==m) break;
    
            }
            printf("
    ");
        }
        return 0;
    }

     http://acm.hdu.edu.cn/showproblem.php?pid=1425

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #define N 500000
    int b[1000001];
    int main()
    {
        int n,m,t;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            memset(b,0,sizeof(b));
            for(int i=0;i<n;i++)
            {
                scanf("%d",&t);
                if(t<0)
                    b[t+N]++;
                else b[t+N]++;
            }
            int flag=0;
            int l=0;
            for(int i=1000000;i>=0;i--)
            {
                while(b[i])
                {
                    if(flag==0)
                    {
                           printf("%d",i-N);
                           flag=1;
                    }
                    else printf(" %d",i-N);
                    b[i]--;
                    l++;
                    if(l==m) break;
                }
                if(l==m) break;
    
            }
            printf("
    ");
        }
        return 0;
    }
    View Code
  • 相关阅读:
    【Vue原理】Compile
    vue v-cloak 的作用和用法
    vue中template的作用及使用
    Vue-router 嵌套路由
    Vue keep-alive实践总结
    Vuex入门(2)—— state,mapState,...mapState对象展开符详解
    mysql允许外部连接设置
    Swagger入门教程
    牛客枚举题---铺地毯
    牛客区间求和、枚举、贪心题---数学考试
  • 原文地址:https://www.cnblogs.com/zhangmingcheng/p/3816656.html
Copyright © 2011-2022 走看看