codeforces#314D&567D One-Dimensional Battle Ships (Set)
2015-08-07 11:46
260 查看
题目大意:http://codeforces.com/problemset/problem/567/D点击打开链接
有一个n*1的矩形格子,alice可以往里边放k个(1*a)的船,每个船不能交叉和接触比如【1,2】【3,4】不行~~然后bob炮轰格子,问几步可以保证他一定打到船
解题思路:二分+Set,每打一次,更新下去区间,看能放下的船数是否为减少~~
有一个n*1的矩形格子,alice可以往里边放k个(1*a)的船,每个船不能交叉和接触比如【1,2】【3,4】不行~~然后bob炮轰格子,问几步可以保证他一定打到船
解题思路:二分+Set,每打一次,更新下去区间,看能放下的船数是否为减少~~
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<vector> #include<set> using namespace std; const int maxn=(int)2*1e5+100; set<int> p; int n,m,k,a,b,ans; int main() { while(scanf("%d%d%d",&n,&k,&a)!=EOF) { p.clear(); scanf("%d",&m); int flag=0; p.insert(0); p.insert(n+1); ans=(n+1)/(a+1);//a+1最后的a+1多了一个1,n+1补上 for(int i=1; i<=m; i++) { scanf("%d",&b); if(flag==0) { int c=*p.lower_bound(b); int d=*--p.lower_bound(b); p.insert(b); ans-=(c-d)/(a+1); ans+=((c-b)/(a+1)+(b-d)/(a+1)); if(ans<k) flag=i; } } if(flag) printf("%d\n",flag); else printf("-1\n"); } }
相关文章推荐
- 比特、字节转换
- [转] 淘宝数据库分布式代理层TDDL剖析
- Aspose.Cells.dll的运用
- Linux系统用户账号管理
- PHP 实现文件强制下载
- TCP--SYN洪水攻击
- 互联网公司2014前端笔试面试题:HTML/CSS篇
- JavaBean基本概念
- PHP的array_map函数使用类内部方法作为回调函数的实现方式
- 【细说PHP学习】第十八章 MySQL数据表的设计
- 2015暑假训练赛个人赛(8.7)
- Mac下配置Apache服务
- D4
- [转载]x86/x86-64/x64/AMD64/IA64/Intel64
- C++ 静态全局变量与普通全局变量
- hdoj 5001 概率dp
- 【面经】阿里、腾讯、百度产品经理面试录:我是怎样同时拿到BAT Offer的?
- MFC_为MFC对话框建立初始化函数BOOL HistoryData::OnInitDialog()
- 一队人逢3出列
- 图片的二进制转换