地址:http://codeforces.com/contest/257/problem/A
快排(一开始快排还写错了,死循环),然后就是比较所需插孔和已有插孔的个数了
注意别忘了不需要排插的情况,此时答案为0
1 #include<stdio.h> 2 3 int n,m,k; 4 int f[50]; 5 6 int ones(int l,int r) 7 { 8 int i=l,j=r,flag=0,key=f[l]; 9 int t1; 10 while(i<j) 11 { 12 if(0==flag) 13 { 14 if(f[j]>key) 15 { 16 t1=f[j]; 17 f[j]=f[i]; 18 f[i]=t1; 19 flag=1; 20 } 21 else 22 { 23 j--; 24 } 25 } 26 else 27 { 28 if(f[i]<key) 29 { 30 t1=f[j]; 31 f[j]=f[i]; 32 f[i]=t1; 33 flag=0; 34 } 35 else 36 { 37 i++; 38 } 39 } 40 } 41 return i; 42 } 43 44 void quick(int l,int r) 45 { 46 int mid; 47 if(l<r) 48 { 49 mid=ones(l,r); 50 quick(l,mid-1); 51 quick(mid+1,r); 52 } 53 } 54 55 int main() 56 { 57 int i,ans=-1; 58 scanf("%d %d %d",&n,&m,&k); 59 for(i=0;i<n;i++) 60 { 61 scanf("%d",&f[i]); 62 } 63 quick(0,n-1); 64 for(i=0;i<n;i++) 65 { 66 if(0==i && k>=m) {ans=0;break;} 67 if(f[i]+k-1<m) k=k+f[i]-1; 68 else {ans=i+1;break;} 69 } 70 printf("%d\n",ans); 71 return 0; 72 }