51nod-1420-贪心

题目来源: CodeForces
基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题
 收藏
 关注

有n只袋鼠。每只袋鼠的大小用一个整数表示。一只小袋鼠能装进一只大袋鼠的条件是,大袋鼠的大小至少是小袋鼠的两倍。

每只大袋鼠最多可以装一只袋鼠。小袋鼠被装进大袋鼠之后就不能再装其它的袋鼠了。

小袋鼠被装进大袋鼠之后就不能被我们看见了。请找出一个装袋鼠的方案,使得被看见的袋鼠最少。

Input
单组测试数据。
第一行包含一个整数n(1≤n≤5*10^5)。
接下来n行,每行一个整数si,表示第i只袋鼠的大小 (1≤si≤10^5)。
Output
输出一个整数,即最少能看见的袋鼠数量。
Input示例
8
2
5
7
6
9
8
4
2
Output示例
5

    最少能看见(n+1)/2的袋鼠,因为每只袋鼠最多装一只袋鼠。所以排序后考虑用后半部分装前半部分,贪心的考虑,我们应该用大袋鼠装尽可能大的小袋鼠,如果装不下,说明没有更大的能装下,略过即可。

 1 #include<iostream>
 2 #include<cstring>
 3 #include<queue>
 4 #include<cstdio>
 5 #include<stack>
 6 #include<set>
 7 #include<cmath>
 8 #include<ctime>
 9 #include<time.h> 
10 #include<algorithm>
11 using namespace std;
12 #define mp make_pair
13 #define debug puts("debug")
14 #define LL long long 
15 #define pii pair<int,int>
16 vector<LL>a;
17 bool vis[500050];
18 int main(){
19     LL n,i,j,k;
20     cin>>n;
21     for(i=1;i<=n;++i){
22         scanf("%lld",&k);
23         a.push_back(k);
24     }
25     sort(a.begin(),a.end());
26     for(i=n/2-1;i>=0;--i){
27         if(a[i]*2<=a[n-1]){
28             n--;
29         }
30     }
31     cout<<n<<endl;
32     return 0;
33 }

 


posted @ 2018-04-25 21:25  *zzq  阅读(130)  评论(0编辑  收藏  举报