现在的位置: 首页 > 综合 > 正文

多校联盟–20140801–G – Christmas Play

2015年05月31日 ⁄ 综合 ⁄ 共 1020字 ⁄ 字号 评论关闭

 多校联盟--20140801--G - Christmas Play


题意:给出两个数n,k,你要做的是求出从1到n里面找出k个数,使得这k个数里最大值减去最小值的值最小!;

题意简单明了,别人都水过了,就我木有过…  ::>_<::(崛起崛起!!)

链接: http://vjudge.net/contest/view.action?cid=51403#problem/G。。

比赛完认真想了一下:

果然大水题:

/***************
Author:jiabeimuwei
Times:680ms
Sources:多校联盟
***************/
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<ctime>
#include<queue>
#include<stack>
using namespace std;
//#include<windows.h>
//#include<conio.h>
#define max(a,b) a>b?a:b
#define min(a,b) a>b?b:a
#define mem(a,b) memset(a,b,sizeof(a))
#define malloc(sb) (sb *)malloc(sizeof(sb))
#define EPS             1e-8
#define DINF            1e15
#define MAXN            100050
#define MOD             1000000007
#define INF 999999999
const int maxn = 20001 ;
int a[maxn];
bool cmp(int a,int b)
{
    return a>b;
}
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int k,n;
        scanf("%d%d",&n,&k);
        for(int i=0; i<n; i++)
            scanf("%d",&a[i]);
        sort(a,a+n,cmp);
        if(k==1)
        {
            printf("0\n");
        }
        else if(k==n)
        {
            printf("%d\n",a[0]-a[n-1]);
        }
        else
        {
            int mm=INF;
            for(int i=0; i<n-k+1; i++)
                mm=min(mm,a[i]-a[i+k-1]);
            printf("%d\n",mm);
        }
    }
    return 0;
}


 

抱歉!评论已关闭.