【51nod-1521】一维战舰
爱丽丝和鲍博喜欢玩一维战舰的游戏。他们在一行有n个方格的纸上玩这个游戏(也就是1×n的表格)。
在游戏开始的时候,爱丽丝放k个战舰在这个表格中,并不把具体位置告诉鲍博。每一只战舰的形状是 1×a 的长方形(也就是说,战舰会占据a个连续的方格)。这些战舰不能相互重叠,也不能相接触。
然后鲍博会做一系列的点名。当他点到某个格子的时候,爱丽丝会告诉他那个格子是否被某只战舰占据。如果是,就说hit,否则就说miss。
但是这儿有一个问题!爱丽丝喜欢撒谎。他每次都会告诉鲍博miss。
请你帮助鲍博证明爱丽丝撒谎了,请找出哪一步之后爱丽丝肯定撒谎了。
Input
单组测试数据。
第一行有三个整数n,k和a(1≤n,k,a≤2*10^5),表示表格的大小,战舰的数目,还有战舰的大小。输入的n,k,a保证是能够在1×n的表格中放入k只大小为a的战舰,并且他们之间不重叠也不接触。
第二行是一个整数m(1≤m≤n),表示鲍博的点名次数。
第三行有m个不同的整数x1,x2,...,xm,xi是鲍博第i次点名的格子编号。格子从左到右按照1到n编号。
Output
输出一个整数,表示最早一次能够证明爱丽丝一定撒谎的点名编号。如果不能证明,输出-1。点名的编号依次从1到m编号。
#include <stdio.h>
#include <set>
#include <iostream>
using namespace std;
const int N = ;
set<int>S;
int main()
{
int n, k, a, m, x, ans = -;
bool f = ;
cin>>n>>k>>a>>m;
S.insert(n+);
S.insert();
int c = (n+)/(a+);//目前一共可放舰数
for(int i=; i<=m; i++)
{
scanf("%d", &x);
S.insert(x);
//未找到撒谎编号进入
if(!f)
{
set<int>::iterator it = S.lower_bound(x);
set<int>::iterator it1 = it;
it1--;//前一个点名编号
set<int>::iterator it3 = it;
it3++;//后一个点名编号
int num = (*it3 - *it1)/(a+);//前后编号之间可以放的战舰数
c -= num;
c += (*it-*it1)/(a+)+(*it3-*it)/(a+);//加入该点名编后后总共可放的战舰数
if(c < k)
{
ans = i;
f = ;
}
}
}
printf("%d\n", ans);
return ;
}
还有一种方法不用set也可以解决。从这个编号向左右寻找最近的两个编号。
#include <stdio.h> using namespace std;
const int N = ;
int mp[N];
int main()
{
int n, k, a, m, x, ans = -;
bool f = ;
scanf("%d%d%d%d", &n, &k, &a, &m);
mp[] = , mp[n+] = ;
int c = (n+)/(a+);//目前一共可放舰数
for(int i=; i<=m; i++)
{
scanf("%d", &x);
mp[x] = ;
if(!f)
{
int j, l;
for(j=x-; j>=&&!mp[j]; j--);
for(l=x+; l<=n&&!mp[l]; l++);
int num = (l - j)/(a+);
c -= num;
c += (x-j)/(a+)+(l-x)/(a+);
if(c < k)
{
ans = i;
f = ;
}
}
}
printf("%d\n", ans);
return ;
}
【51nod-1521】一维战舰的更多相关文章
- 51Nod 1521 一维战舰
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1521 思路:先计算出一开始最多能放多少艘战舰,然后每次输入一个点后,找到 ...
- 51 nod 1521 一维战舰 时间复杂度O(n),同 Codeforces 567D. One-Dimensional Battle Ships 有详细注释
题目:51nod: 题目Codeforces: 题目注意到两个战舰不能挨在一起就可以了. // 每一段 struct node{ int left; // 段的左端点 int right; // 段的 ...
- 51 nod 1521 一维战舰(二分)
传送门 题意 分析 这是我在51nod上的第2题,下载了4个数据,得不偿失?我太菜啦 一开始wa了6个点,下数据后发现舰与舰不能相邻,再交wa,发现l和r都没设好,再wa,发现check里面[1,b[ ...
- 51 Nod 一维战舰
1521 一维战舰 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 爱丽丝和鲍博喜欢玩一维战舰的游戏.他们在一行 ...
- 51nod水题记
妈呀51nod已经刷不动了又开始跟bzoj一样总是得看题解了...那么发一下总结吧... 1051:最大子矩阵 #include<cstdio> #include<cstring&g ...
- 51nod 省选联测 R2
51nod 省选联测 R2 上场的题我到现在一道都没A,等哪天改完了再写题解吧,现在直接写第二场的. 第二场比第一场简单很多(然而这并不妨碍我不会做). A.抽卡大赛:http://www.51nod ...
- [51Nod 1773] A国的贸易
[51Nod 1773] A国的贸易 题目描述 A国是一个神奇的国家. 这个国家有 2n 个城市,每个城市都有一个独一无二的编号 ,编号范围为0~2n-1. A国的神奇体现在,他们有着神奇的贸易规则. ...
- ACM学习历程—51NOD 1412 AVL树的种类(递推)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1770 这是这次BSG白山极客挑战赛的B题.设p(i, j)表示节点个数为 ...
- 51nod - 1278 相离的圆 (二分)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1278 因为圆心都在x轴上,把每个圆转化成线段后,按线段的起点排序,那么对 ...
随机推荐
- ubuntu 16.4安装卸载apache+php+mysql
1.安装apache sudo apt-get update sudo apt-get install apache2 2.安装php5.6 添加PPA源:add-apt-repository ppa ...
- manager
S 识别 M 买账 A-安排 R-认同 T-提问识别上级的沟通特点,判断形势,识别沟通的时机摆正自己的角色位置,礼多人不怪,回应情绪做好沟通准备,有策略,安排合适时间听取反馈意见,认同并接纳指导提问 ...
- servlet中通过getWriter()获取out返回给浏览器出现中文乱码问题
感谢博主https://blog.csdn.net/louyongfeng3613/article/details/50160317 在Servlet编程中,经常需要通过response对象将一些信息 ...
- 查看ubuntu 各系统的内核版本
1.查看ubuntu版本号: cat /etc/issue 返回结果: Ubuntu 16.04.2 LTS \n \l 2.查看内核版本号: cat /proc/version 返回结 ...
- springboot 监控
一.什么是spring-boot-starter-actuator(doc) springboot项目如何检查配置与运行状态呢?官方提供了一些接口可以查看springboot项目运行情况,只需要导入s ...
- saltstack实现自动化扩容
案例:当nginx的并发达到3000,并持续了一段时间时,通过自动化创建一台虚拟机,部署应用最后添加到集群提供服务: zabbix监控(nginx并发量)------->action------ ...
- Java基础东西(按位操作运算)
http://aokunsang.iteye.com/blog/615658 前奏: 昨天一哥们问我Java位移你会吗,我说不会,想想位移这么麻烦,一般有位移的Java代码一律不看,有几个人会啊, ...
- Java 面试题代码类收集
long temp=(int)3.9; System.out.println(temp); temp%=2; System.out.println(temp); 3 1 Java里面类的方法名可以与类 ...
- java基础笔试题二(集合关系)
知识点:java集合继承关系(Collection,Map) 1.集合框架体系图 2.java的集合层次 来自博客(http://blog.csdn.net/stubbornaccepted/arti ...
- UVA 1213 Sum of Different Primes(经典dp)
题意:选择k(k<15)个唯一质数,求出和为n(n<1121)的可能数 题解:预处理dp,dp[k][n]表示使用k个素数拼成n的总方案数 就是三重枚举,枚举k,枚举n,枚举小于n的素数 ...