多校联盟--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; }