[Codeforces Round #159 (Div. 2)]A. Sockets

地址: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 }

 

转载于:https://www.cnblogs.com/tjsuhst/archive/2013/01/18/2866470.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值