• SORT AGAIN(hdu2523)


    SORT AGAIN

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3483    Accepted Submission(s): 1110

    Problem Description
    给你N个整数,x1,x2...xn,任取两个整数组合得到|xi-xj|,(0<i,j<=N,i!=j)。 现在请你计算第K大的组合数是哪个(一个组合数为第K大是指有K-1个不同的组合数小于它)。
     
    Input
    输入数据首先包含一个正整数C,表示包含C组测试用例. 每组测试数据的第一行包含两个整数N,K。(1<N<=1000,0<K<=2000) 接下去一行包含N个整数,代表x1,x2..xn。(0<=xi<=2000)
     
    Output
    对于每组测试数据,请输出第K大的组合数,每个输出实例占一行。
     
    Sample Input
    3
    3 2
    4 0 7
    4 2
    1 2 3 4
    2 1
    2 9
     
    Sample Output
    4
    2
    7
     
    题意:给你N个数,运用组合数的原理,取第K个数,
     
    思路  :  把和装起来,排序(从小到大),但是值得注意的是,当差相同时,只能算一个;
     
     
    详见代码:
     
    #include<cstdio>//坑!重复的数字居然算一次,,,不解释。
    #include<cmath>
    #include<cstdlib>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    
    int cmp(int x,int y)
    {
        return x<y;
    }
    int main()
    {
        int num[5000],x[1005],a[5000];
        int i,j,n,k,T,t;
        scanf("%d",&T);
        while(T--)
        {
            memset(num,0,sizeof(num));
            scanf("%d%d",&n,&k);
            for(i=0;i<n;i++)
                scanf("%d",&x[i]);
            t=0;
            for(i=0;i<n-1;i++)
                for(j=i+1;j<n;j++)
                {
                    int temp=fabs(x[i]-x[j]);
                    num[temp]=1;
                }
            for(i=0;i<5000;i++)
                if(num[i])
                    a[t++]=i;
            printf("%d
    ",a[k-1]);
        }
        return 0;
    }
  • 相关阅读:
    模板驱动表单中的自定义表单验证
    kartikgridGridView导出excel变科学计数
    linux下安装vue-element-admin报错
    yii2运行流程
    nginx报错502 Bad Gateway
    linux下安装npm
    登录验证记录
    vue的store、vuex状态管理
    vue-cli3使用路由和循环引入路由
    vue使用问题汇总记录
  • 原文地址:https://www.cnblogs.com/yuyixingkong/p/3443916.html
Copyright © 2020-2023  润新知