牛客竞赛Arch0n interesting game

题目链接:https://ac.nowcoder.com/acm/problem/15686
一、题目:
牛客竞赛Arch0n interesting game_第1张图片
牛客竞赛Arch0n interesting game_第2张图片
二、题意:
给定n张牌,两两抽取,以小的那张的数值为有效分值,找出第k大的有效分值。

三、思路:
1、错误示范:
我进行了模拟,把所有有效分值记了下来,然后排序,结果。。。自然超时。
2、改进版:
总结了一下,发现这些分值是有规律的,如果将n个数按从小到大排列按顺序进行比较,那么前n-1个有效值就是第1个数,接下来的n-2个有效值为第2个数,再接着的n-3个有效值为第3个数……
我的笨办法是把这些数存在数组里,题目要哪个我给哪个。。

四、代码:

#include 
#include 
#include 

int cmp(const void *a,const void *b){
    return *(int*)a-*(int*)b;
}

int main(){
    int i,j,g,t,k,n,num[2500]={0},ans[4000000]={0};
    scanf("%d",&t);
    for(i=0;i<t;i++){
        g=0;
        scanf("%d %d",&n,&k);
        //g=n*(n-1)/2;
        for(j=0;j<n;j++)
            scanf("%d",&num[j]);
        qsort(num,n,sizeof(int),cmp);
        for(int p=1;p<=n;p++){
            for(int q=0;q<n-p;q++){
                ans[g++]=num[p-1];
                //printf("%d ",ans[g-1]);
            }
        }
        printf("%d\n",ans[g-k]);
        memset(num,0,sizeof(num));
        memset(ans,0,sizeof(ans));
    }
}

你可能感兴趣的:(牛客)