数袋鼠好有趣
2017-06-23 08:34
211 查看
有n只袋鼠。每只袋鼠的大小用一个整数表示。一只小袋鼠能装进一只大袋鼠的条件是,大袋鼠的大小至少是小袋鼠的两倍。
每只大袋鼠最多可以装一只袋鼠。小袋鼠被装进大袋鼠之后就不能再装其它的袋鼠了。
小袋鼠被装进大袋鼠之后就不能被我们看见了。请找出一个装袋鼠的方案,使得被看见的袋鼠最少。
Input
Output
Input示例
Output示例
每只大袋鼠最多可以装一只袋鼠。小袋鼠被装进大袋鼠之后就不能再装其它的袋鼠了。
小袋鼠被装进大袋鼠之后就不能被我们看见了。请找出一个装袋鼠的方案,使得被看见的袋鼠最少。
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
#include <iostream> #include <algorithm> #include <cstdio> using namespace std; const int MAXN = 5e5; int input[MAXN]; int search(int left, int right, int k) { int result = -1; while (left < right-1) { int mid = left + (right-left)/2; if (input[mid] >= k) { right = mid; } else { left = mid; } } if (input[left] >= k) { result = left; } else if (input[right] >= k) { result = right; } return result; } int main(int argc, const char * argv[]) { int n; cin >> n; for (int i = 0; i < n; i++) { cin >> input[i]; } sort(input, input + n); int right = search(0, n, 2 * input[0]); if (right == -1) { cout << n << endl; return 0; } int count = 0; for (int i = 0; i < n / 2; i++) { while (right < n) { if (input[right] >= 2*input[i]) { break; } right++; } if (right < n) { count++; right++; } else { break; } } cout << n - count << '\n'; return 0; }
相关文章推荐
- 1420 数袋鼠好有趣
- 51nod1420 数袋鼠好有趣
- 51nod oj 1420 数袋鼠好有趣【贪心】
- 51nod 1420 数袋鼠好有趣 (贪心)
- 51Nod-1420-数袋鼠好有趣
- 1420 数袋鼠好有趣
- 数袋鼠好有趣
- 51Nod - 1420 数袋鼠好有趣——贪心
- [51NOD1420] 数袋鼠好有趣(贪心)
- 51Nod - 1420 数袋鼠好有趣
- 51nod 1420 数袋鼠好有趣(贪心)
- 51nod 1420 数袋鼠好有趣【贪心】
- 51nod 1420 数袋鼠好有趣(贪心)
- 51nod 1420 数袋鼠好有趣
- 12个有趣的C语言问答
- 12个有趣的C语言面试题
- 白话经典算法系列之十 一道有趣的GOOGLE面试题
- Android学习笔记(二一):有趣的widget-日期和时间
- 一道有趣的笔试题
- 追MM与设计模式的有趣见解