FZU 2203 单纵大法好 (二分 && 贪心)
题意 : 老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 单纵大法好 (二分 && 贪心)的更多相关文章
- fzu月赛 2203 单纵大法好 二分
Accept: 8 Submit: 18Time Limit: 5000 mSec Memory Limit : 65536 KB Problem Description 人在做,天在看 ...
- FOJ 2203 单纵大法好
二分答案+验证 #include<cstdio> #include<cstring> #include<cmath> #include<algorithm&g ...
- $bzoj2067\ szn$ 二分+贪心
正解:二分+贪心 解题报告: 传送门$QwQ$ 题目大意就说有一棵树,然后要用若干条线覆盖所有边且不能重叠.问最少要用几条线,在用线最少的前提下最长的线最短是多长. 昂首先最少用多少条线这个还是蛮$e ...
- Codeforces Gym 100231B Intervals 线段树+二分+贪心
Intervals 题目连接: http://codeforces.com/gym/100231/attachments Description 给你n个区间,告诉你每个区间内都有ci个数 然后你需要 ...
- 2016-2017 ACM-ICPC CHINA-Final Ice Cream Tower 二分+贪心
/** 题目:2016-2017 ACM-ICPC CHINA-Final Ice Cream Tower 链接:http://codeforces.com/gym/101194 题意:给n个木块,堆 ...
- 【bzoj2097】[Usaco2010 Dec]Exercise 奶牛健美操 二分+贪心
题目描述 Farmer John为了保持奶牛们的健康,让可怜的奶牛们不停在牧场之间 的小路上奔跑.这些奶牛的路径集合可以被表示成一个点集和一些连接 两个顶点的双向路,使得每对点之间恰好有一条简单路径. ...
- Codeforces_732D_(二分贪心)
D. Exams time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...
- CF732D Exams 二分 贪心
思路:二分+贪心 提交次数:10次以上 错因:刚开始以为二分(边界,$+1or-1$)写错了,调了半天,后来才发现是$ck()$写错了.开始只判了最后是否小于零,而应该中间一旦小于零就$return\ ...
- $CF949D\ Curfew$ 二分/贪心
正解:二分/贪心 解题报告: 传送门$QwQ$ 首先这里是二分还是蛮显然的?考虑二分那个最大值,然后先保证一个老师是合法的再看另一个老师那里是否合法就成$QwQ$. 发现不太会搞这个合不合法的所以咕了 ...
随机推荐
- 文件的上传(1)(表单上传和ajax文件异步上传)
文件的上传(表单上传和ajax文件异步上传) 项目中用户上传总是少不了的,下面就主要的列举一下表单上传和ajax上传!注意: context.Request.Files不适合对大文件进行操作,下面列举 ...
- 浅析射线检测 raycast 的使用 !Cocos Creator 3D !
哎呀?为什么我设置了节点点击回调没反应呀? 记得在写小鸡拍拍的时候遇到一个问题,想要捕捉排球的点击事件,按照 2d 的写法,给3d 节点添加 node 事件,结果点了没反应.代码大概是以下的样子. t ...
- poj1042(贪心+枚举)
题目链接:https://vjudge.net/problem/POJ-1042 题意:给n个湖,给出每个湖第一次打捞时鱼的数量f[i],每单位时间鱼减少的数量d[i],从湖i到湖i+1用时t[i], ...
- Mycat+Mysql主从复制实现双机热备
Mycat+Mysql主从复制实现双机热备 一.mysql主从配置原理 双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步.对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据 ...
- opencv学习之显示图像-imshow函数
序 上一篇opencv学习之读取图像-imread函数介绍完opencv读取图片函数imread,这次来介绍与它对应的图像显示函数imshow. imshow函数 imshow函数功能 imshow的 ...
- python 安装 colorama 控制台输出彩色文字
pip install colorama from colorama import Back,Fore,Style # 字体颜色print(Fore.LIGHTBLUE_EX,'HelloWorLd' ...
- sys模块&json模块&pickle模块
sys模块&json模块&pickle模块 sys模块 一.导入方式 import sys 二.作用 与Python解释器交互 三.模块功能 3.1 经常使用 sys.path #返回 ...
- python中对多态和多态性的理解
python中对多态的理解 一.多态 多态是指一类事物有多种形态,比如动物类,可以有猫,狗,猪等等.(一个抽象类有多个子类,因而多态的概念依赖于继承) import abc class Animal( ...
- AGC015E Mr.Aoki Incubator
atcoder luogu 首先可以考虑给一个人\(A\)染色.其他人被染色,要么被本来在后面的速度更快的人染色,要么被在前面的更慢的人染色.然后假设一个速度比最开始那个人慢的人\(B\)最后被染色了 ...
- 定义一个外部类Father,有成员变量name并赋一个初值。
1.内部类的使用:(1)定义一个外部类Father,有成员变量name并赋一个初值.(2)定义一个内部类Child,并定义一个getValue()方法,在方法中调用外部类Father的name变量.( ...