https://www.51nod.com/Challenge/Problem.html#!#problemId=1420

一开始乱搞了一发,每个袋鼠二分找最小的能放它的,然后二分的范围从下一个开始保证不会把两个小袋鼠装在同一个里面,还过了一半的数据……

然后才发现袋鼠并不能嵌套。想打vis标记大袋鼠跳过大袋鼠,然后样例都过不了。

又想了半天网络流,流个鬼鬼流。

看了一下别人的提示,贪心加二分。

好像我误解了别人的贪心加二分,跑得比别人还快快。

明显选的袋鼠一定是最小的那波,这样最优。

然后二分选的袋鼠的数量,套在我第一次交的那个里面,一发就过了,500ms,应该是正解的做法。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll; int n;
int a[500005];
int cpa[500005]; bool check(int m) {
int be=m,en=n;
for(int i=0; i<m; i++) {
int res=lower_bound(a+be,a+en,2*a[i])-a;
if(res==en)
return false;
else {
be=res+1;
}
}
return true;
} int main() {
while(~scanf("%d",&n)) {
for(int i=0; i<n; i++) {
scanf("%d",&a[i]);
}
sort(a,a+n);
for(int i=0;i<m;i++){ } int ans=0;
int l=0,r=n/2;
while(1) {
int m=(l+r)>>1;
if(m==l){
if(check(r)){
ans=n-r;
}
else{
ans=n-l;
}
break;
}
if(check(m)){
l=m;
}
else{
r=m-1;
}
}
printf("%d\n",ans);
}
}

然后看见一个更惊人的,从每个袋鼠开始选最大的能放进它的。好像没什么问题,这个贪心策略是对的。

2,4,5,8

从小的开始贪心,错在假如2用了4,虽然减少了一个,但假如2用了5,4用了8,那就减少两个。因为使用了4会影响4不能选8,所以不能这样贪心。

但是从大的开始贪心就没问题,例如8可以装4,可以装2,那装4一定更好。(对个鬼鬼,假如有3呢?把4吃了2放哪里?)。

其实这个策略的正确性应该在于先分成前后两部分(至于为什么要把奇数多出来的放在后部分,其实特判cnt不能超过n/2也可以,不然就有可能嵌套),前部分从后部分中选最合适的。这样不会有嵌套。但居然也是500ms,感觉被骗了。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll; int n;
int a[500005];
int main() {
while(~scanf("%d",&n)) {
for(int i=0; i<n; i++) {
scanf("%d",&a[i]);
}
sort(a,a+n,greater<int>()); int cnt=0;
for(int i=(n+1)/2;i<n;i++){
if(a[cnt]>=2*a[i])
cnt++;
} printf("%d\n",n-cnt);
}
}

#include <bits/stdc++.h>
using namespace std;
typedef long long ll; int n;
int a[500005];
int main() {
while(~scanf("%d",&n)) {
for(int i=0; i<n; i++) {
scanf("%d",&a[i]);
}
sort(a,a+n,greater<int>()); int cnt=0;
for(int i=0;i<n;i++){
if(a[cnt]>=2*a[i]){
cnt++;
if(cnt==n/2)
break;
}
} printf("%d\n",n-cnt);
}
}

51nod - 1420 - 数袋鼠好有趣 - 贪心 - 二分的更多相关文章

  1. 51nod 1420 数袋鼠好有趣【贪心】

    1420 数袋鼠好有趣 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 有n只袋鼠.每只袋鼠的大小用一个整数表示. ...

  2. 贪心/二分查找 BestCoder Round #43 1002 pog loves szh II

    题目传送门 /* 贪心/二分查找:首先对ai%=p,然后sort,这样的话就有序能使用二分查找.贪心的思想是每次找到一个aj使得和为p-1(如果有的话) 当然有可能两个数和超过p,那么an的值最优,每 ...

  3. poj 2782 Bin Packing (贪心+二分)

    F - 贪心+ 二分 Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu   Description ...

  4. Card Game Cheater(贪心+二分匹配)

    Card Game Cheater Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  5. 51nod 1770 数数字

    1770 数数字 基准时间限制:1 秒 空间限制:262144 KB 分值: 20 难度:3级算法题  收藏  关注 统计一下 aaa ⋯ aaan个a × b 的结果里面 ...

  6. BZOJ2796[Poi2012]Fibonacci Representation——贪心+二分查找

    题目描述 给出一个正整数x,问x最少能由多少个Fibonacci数加减算出. 例如1070=987+89-5-1,因此x=1070时答案是4. 输入 第一行一个正整数q (q<=10),表示有q ...

  7. The 14th Zhejiang Provincial Collegiate Programming Contest Sponsored by TuSimple - F 贪心+二分

    Heap Partition Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge A sequence S = { ...

  8. Codeforces Round #768 (Div. 2) D. Range and Partition // 思维 + 贪心 + 二分查找

    The link to problem:Problem - D - Codeforces   D. Range and Partition  time limit per test: 2 second ...

  9. CodeForces - 1251D (贪心+二分)

    题意 https://vjudge.net/problem/CodeForces-1251D 您是一个大型企业的负责人.在您的企业当中共有n位员工为您工作,而且非常有趣的事是这个n是一个奇数(n不能被 ...

随机推荐

  1. mysql导入数据库_仅仅用frm向mysql导入表结构

    网上一个连接mysql的jsp代码段,给了数据库的备份文件.可是仅仅有frm, mysql的每张表有三个文件.各自是,*.frm是描写叙述了表的结构.*.MYD保存了表的数据记录.*.MYI则是表的索 ...

  2. ffmpeg api升级到3.3 api变化

     void av_free_packet(AVPacket * pkt) Use void av_packet_unref(AVPacket * pkt) Wipe the packet. Unref ...

  3. 第 3 章 第 1 题 精简冗余 if 语句问题 使用数组实现

    问题分析 输入:用户个人收入 输出:该用户要缴纳的个人所得税 约束:不允许使用过多的 if 语句 解答思路 最简单的方法是根据不同的税率区间,创建多个 if 语句来求解.但如此一来便会有 25 个 i ...

  4. return和exit的差别

    #include<stdio.h> #include<sys/types.h> #include<sys/wait.h> #include<unistd.h& ...

  5. ffmpeg强制使用TCP方式推流到EasyDarwin开源流媒体服务器进行直播

    我们的EasyDarwin目前部署在阿里云的服务器上面,运行的效果是非常好的,而且无论是以TCP方式.还是UDP的方式推送,都可以非常好地进行直播转发: 但并不是所有的用户服务器都是阿里云的形式,有很 ...

  6. if UDP is permitted

    Networking Basics (The Java™ Tutorials > Custom Networking > Overview of Networking) https://d ...

  7. ReentrantLock(重入锁)简单源码分析

    1.ReentrantLock是基于AQS实现的一种重入锁. 2.先介绍下公平锁/非公平锁 公平锁 公平锁是指多个线程按照申请锁的顺序来获取锁. 非公平锁 非公平锁是指多个线程获取锁的顺序并不是按照申 ...

  8. Linux环境下安装MySQL(yum方式)

    1.下载mysql源安装包shell> wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm 安装my ...

  9. 关于ActiveMQ接收端停止接收的方法

    现在有一个需求: 在发送端服务器出现故障后,接收端的接收方法要停下来,关于停止接收的方法,我做了下面这些事情: // 获取 ConnectionFactory ConnectionFactory co ...

  10. AndroidPageObjectTest_Simple.java

    以下代码使用ApiDemos-debug.apk进行测试 //这个脚本用于演示PageFactory的功能:使用注解@FindBy.@AndroidFindBy.@IOSFindBy定位元素.注解用法 ...