Problem
有n只袋鼠。每只袋鼠的大小用一个整数表示。一只小袋鼠能装进一只大袋鼠的条件是,大袋鼠的大小至少是小袋鼠的两倍。 每只大袋鼠最多可以装一只袋鼠。小袋鼠被装进大袋鼠之后就不能再装其它的袋鼠了。 小袋鼠被装进大袋鼠之后就不能被我们看见了。请找出一个装袋鼠的方案,使得被看见的袋鼠最少。
(袋鼠不能3只套在一起)
输出一个整数,即最少能看见的袋鼠数量。
Solution
排序,分成两半,前面和后面的匹配。一开始多了个等号一直错。
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #include<stdio.h> #include<algorithm> int n,a[500020],ans;
int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } std::sort(a+1,a+1+n); ans=n; int p1=1,p2=n/2+1; while(p1<=n/2&&p2<=n){ while(p1<=n/2&&p2<=n&&a[p1]*2>a[p2]) p2++; if(p1<=n/2&&p2<=n){ ans--; } p1++; p2++; } printf("%d\n",ans); return 0; }
|