题意 : 老S最近喜欢上某个搜集战舰的游戏,这个游戏中很重要的一个内容是能编排自己的战舰,通过出击完成任务来获取资源或新的战舰。大家都说老S是一个“直男”,所以他喜欢把战舰排成一条直线。目前老S正准备完成某个新的任务--“困难级丹麦海峡”,可以将地图视为1*N的一列方格(下标为1,2,...,N),老S有K列战舰,每列战舰长度为A。老S可以将自己的战舰布局在地图中的任意位置,但是两列战舰之间至少要有一个空格子,并且显然战舰是不能重叠放置的。老S通过内部人员率先知道了敌军的炮弹将会打向那些位置,老S希望使自己的舰队尽量晚的被第一次击中。请输出老S的舰队最晚将被敌方炮弹第一次击中?如果老S的舰队可以不被敌方炮弹击中则输出-1。

分析 : 可以考虑在1~N这个区间内一个个炸弹地增加去尝试是否能够避免被击中, 直到出现无法避免被击中的情况, 那此时答案就是这个炸弹了, 若直到N也就是炸弹全投放都能避免被击中, 那就输出-1。但是这样的话时间是线性的, 如果单看炸弹的轰炸顺序, 从第一个炸弹开始, 随着炸弹数的增加, 区间内被轰击的点越多, 也就是轰炸到的船的可能性越大, 这是单调的, 所以可以考虑二分来挑选炸弹。其中判定能否被击中可以采用贪心策略, 炸弹击中的点将区间划分为几个, 此时只要考虑这几个区间能够容纳下几只船, 如果都能容纳, 说明在不能击中船只, 继续二分增大炸弹数, 当然了, 这里轰炸点是需要排序的。还有一点需要注意=>就是题目有两艘船需要有一列间隔, 所以在计算安全区间的时候需要考虑到, 这里设 两炸弹围出的区间长度为empty, 船长度为len, 能容纳的船只数x(未知数) 故有  len*x+(x-1) <= emtpy 得 x<=(empty+1)/(len+1) , 考虑x的实际意义需要向下取整, 所以 x = (empty+1)/(len+1)

瞎搞 : 听说这种贪心+二分是一类题型, 自己完全没有想到一个个炸弹地增加这样去思考, 完全就是在乱想, 还是弱啊........

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<string>
#include<algorithm>
using namespace std;
;
int temp[maxn], bomb[maxn];
;
bool Check(int x)
{
    ; i<=x; i++){
        temp[i] = bomb[i];
    }
    sort(temp+, temp++x);//排序轰炸点, 方便贪心求出安全区间
    ;
    temp[] = ;
    temp[x+] = N+;
    ; i<=x+; i++){
        cnt = cnt + (temp[i]-temp[i-]+-)/(len+);//相当于(empty+1)/(len+1)
    }
    if(cnt>=K) return true;
    else return false;
}
int main(void)
{
    while(~scanf("%d %d %d", &N, &K, &len)){
        int M;
        scanf("%d", &M);
        ; i<=M; i++){
            scanf("%d", &bomb[i]);
        }
        if(Check(M)){//如果M个炸弹一起上都能避免被轰击
            puts("-1");
            continue;
        }
        , R = M, mid;
        while(L <= R){//二分炸弹数
            mid = (R + L)>>;
            ;
            ;
        }
        printf();
    }
    ;
}

FZU 2203 单纵大法好 (二分 && 贪心)的更多相关文章

  1. fzu月赛 2203 单纵大法好 二分

    Accept: 8    Submit: 18Time Limit: 5000 mSec    Memory Limit : 65536 KB  Problem Description 人在做,天在看 ...

  2. FOJ 2203 单纵大法好

    二分答案+验证 #include<cstdio> #include<cstring> #include<cmath> #include<algorithm&g ...

  3. $bzoj2067\ szn$ 二分+贪心

    正解:二分+贪心 解题报告: 传送门$QwQ$ 题目大意就说有一棵树,然后要用若干条线覆盖所有边且不能重叠.问最少要用几条线,在用线最少的前提下最长的线最短是多长. 昂首先最少用多少条线这个还是蛮$e ...

  4. Codeforces Gym 100231B Intervals 线段树+二分+贪心

    Intervals 题目连接: http://codeforces.com/gym/100231/attachments Description 给你n个区间,告诉你每个区间内都有ci个数 然后你需要 ...

  5. 2016-2017 ACM-ICPC CHINA-Final Ice Cream Tower 二分+贪心

    /** 题目:2016-2017 ACM-ICPC CHINA-Final Ice Cream Tower 链接:http://codeforces.com/gym/101194 题意:给n个木块,堆 ...

  6. 【bzoj2097】[Usaco2010 Dec]Exercise 奶牛健美操 二分+贪心

    题目描述 Farmer John为了保持奶牛们的健康,让可怜的奶牛们不停在牧场之间 的小路上奔跑.这些奶牛的路径集合可以被表示成一个点集和一些连接 两个顶点的双向路,使得每对点之间恰好有一条简单路径. ...

  7. Codeforces_732D_(二分贪心)

    D. Exams time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...

  8. CF732D Exams 二分 贪心

    思路:二分+贪心 提交次数:10次以上 错因:刚开始以为二分(边界,$+1or-1$)写错了,调了半天,后来才发现是$ck()$写错了.开始只判了最后是否小于零,而应该中间一旦小于零就$return\ ...

  9. $CF949D\ Curfew$ 二分/贪心

    正解:二分/贪心 解题报告: 传送门$QwQ$ 首先这里是二分还是蛮显然的?考虑二分那个最大值,然后先保证一个老师是合法的再看另一个老师那里是否合法就成$QwQ$. 发现不太会搞这个合不合法的所以咕了 ...

随机推荐

  1. mysql生成全局id(转)

    由于数据量以及IO效率的因素,很多项目对数据支持的数据库会采取分库分表的方式.使用了分库分表之后需要解决的一个问题就是主键的生成.多个表之间的主键就不能用数据库本身的自增主键来支持,因为不同表之间生成 ...

  2. HDU-5155 Harry And Magic Box

    题目描述 在\(n*m\)的矩阵内每一行每一列都有钻石,问钻石分布的种类? 答案有可能很大,所以输出答案对\(1000000007\)取模. Input 对于每个测试用例,有两个整数\(n\)和\(m ...

  3. Luogu P4095 [HEOI2013]Eden的新背包问题

    题目 求出从前往后的背包\(f_{i,j}\)和从后往前的背包\(F_{i,j}\). 那么对于询问\((d,e)\),答案就是\(\max\limits_{i=0}^e f_{d-1,i}+F_{d ...

  4. hibernate-HQL连接查询 转载sincoolvip

    和SQL查询一样,HQL也支持各种各样的连接查询,如内连接.外连接 连接类型 HQL语法内连接 inner join 或者join迫切内连接 inner join fetch 或join fetch左 ...

  5. 函数进阶装B操作

    三元表达式 条件成立时的返回值 if 条件 else 条件不成立时的返回值 x = 10 y = 20 print(f"x if x > y else y: {x if x > ...

  6. $NOI$ $2019$ 网络同步赛

    D2T1考试前测了自己造的“假”极限数据,看了看内存发现是118MB,感觉没问题就交上去了. 赛后用Lemon测了一下:MLE 88->0 对于别的题我已经不想再说什么了. update: 由于 ...

  7. Codeforces 1220B. Multiplication Table

    传送门 冷静分析容易发现,我们只要能确定一个数的值,所有值也就可以确定了 确定一个数的值很容易,$a_ia_j=M_{i,j},a_ia_k=M_{i,k},a_ja_k=M_{j,k}$ 然后就可以 ...

  8. C++ 调用C语言、extern "C"、__cplusplus关键字

    ——C++编译器完全兼容C语言的编译方式.(但是得有源代码) ——C++编译器会优先使用C++的编译方式进行编译 ——extern "C" 关键字能够强制C++编译器进行C方式的编 ...

  9. sql server ABS函数和PI函数

    --ABS(x)返回x的绝对值 --PI()返回圆周率的值

  10. java中<<,>>和>>>的含义

    <<,>>,>>>为java中的移位运算符. <<表示左移运算符 例如8<<2,表示将8向左移2位,结果为32.低位补0. 二进制演算 ...