题目

爱丽丝和鲍博喜欢玩一维战舰的游戏。他们在一行有n个方格的纸上玩这个游戏(也就是1×n的表格)。

在游戏开始的时候,爱丽丝放k个战舰在这个表格中,并不把具体位置告诉鲍博。每一只战舰的形状是 1×a 的长方形(也就是说,战舰会占据a个连续的方格)。这些战舰不能相互重叠,也不能相接触。

然后鲍博会做一系列的点名。当他点到某个格子的时候,爱丽丝会告诉他那个格子是否被某只战舰占据。如果是,就说hit,否则就说miss。

但是这儿有一个问题!爱丽丝喜欢撒谎。他每次都会告诉鲍博miss。

请你帮助鲍博证明爱丽丝撒谎了,请找出哪一步之后爱丽丝肯定撒谎了。

输入

单组测试数据。
第一行有三个整数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编号。

输出

输出一个整数,表示最早一次能够证明爱丽丝一定撒谎的点名编号。如果不能证明,输出-1。点名的编号依次从1到m编号。

输入样例

样例1
11 3 3
5
4 8 6 1 11

样例2
5 1 3
2
1 5

输出样例

样例1
3

样例2
-1

思路:桶排+模拟

利用桶排的思维,对给出的不能放置的点进行统计,然后统计当前能放的战舰个数并与应该能放的个数进行比较,如果小于,说明撒谎,输出位置即可

源程序

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#define EPS 1e-9
#define PI acos(-1.0)
#define INF 0x3f3f3f3f
#define LL long long
const int MOD = 1E9+7;
const int N = 1000000+5;
const int dx[] = {-1,1,0,0};
const int dy[] = {0,0,-1,1};
using namespace std;
bool bucket[N];
int main() {int n,k,a,m;scanf("%d%d%d%d",&n,&k,&a,&m);bool flag=false;int num=(n+1)/(a+1);//最多放的数量for(int i=1;i<=m;i++){int x;scanf("%d",&x);bucket[x]=true;if(!flag){int left=x-1,right=x+1;while(left>=0&!bucket[left])//x左端的空余left--;while(right<=n&&!bucket[right])//x右端的空余right++;num=num-(right-left)/(a+1);//减去x左端空余到x右端空余不能放的数量num=num+(x-left)/(a+1)+(right-x)/(a+1);//加上x左右两端空余应该能放的数量if(num<k){//如果小于最多放的数量,说明欺骗printf("%d\n",i);flag=true;}}}if(!flag)printf("-1\n");return 0;
}

一维战舰(51Nod-1521)相关推荐

  1. 51 nod 1521 一维战舰 时间复杂度O(n),同 Codeforces 567D. One-Dimensional Battle Ships 有详细注释

    题目:51nod: 题目Codeforces: 题目注意到两个战舰不能挨在一起就可以了. // 每一段 struct node{int left; // 段的左端点int right; // 段的右端 ...

  2. 51 nod 1521 一维战舰 时间复杂度O(n),同 Codeforces 567D. One-Dimensional Battle Ships 有详细注释...

    题目:51nod: 题目Codeforces: 题目注意到两个战舰不能挨在一起就可以了. // 每一段 struct node{int left; // 段的左端点int right; // 段的右端 ...

  3. element表格里面放图片_Element ui表格展示图片问题

    在MyBook Live上部署svn 一直以来都在用svn管理源代码,美中不足的是由于svn服务器端部署在本地,无法实现在异地迁入迁出程序,因此考虑将svn服务器部署在我的MyBook Live上. ...

  4. 常用技巧 —— 桶排

    [概述] 桶排的思想是一种比较重要的技巧,在 由于桶排的特殊性,桶排仍需进行模拟装桶的过程,而且有时由于数据范围无法开很大的数组,需要使用 map 与其结合 关于桶排:点击这里 [例题] Romaji ...

  5. 51nod 省选联测 R2

    51nod 省选联测 R2 上场的题我到现在一道都没A,等哪天改完了再写题解吧,现在直接写第二场的. 第二场比第一场简单很多(然而这并不妨碍我不会做). A.抽卡大赛:http://www.51nod ...

  6. 贪心算法基础之活动时间安排(一)安排 51nod 贪心教程

    有若干个活动,第i个开始时间和结束时间是[Si,fi),只有一个教室,活动之间不能交叠,求最多安排多少个活动? 输入 第1行:1个数N,时间段的数量(2 <= N <= 10000) 第2 ...

  7. 51nod 1843 排列合并机【DP去重】Ender的模拟赛

    题目描述 有两个1~n的排列A,B,序列C一开始为空,每次可以选择进行以下两种操作之一 1)若A不为空,则可取出A的开头元素放在序列C的末尾 2)若B不为空,则可取出B的开头元素放在序列C的末尾 这样 ...

  8. 51nod 1617 奇偶数组

    传送门 回来看一眼51nod,发现自己掉到rank4了,赶紧切道题回rank3. 一眼不会做,这种东西应该慢慢找规律吧--然后看到数据范围其实比较小,应该是单次log的,那是不是可以分治啊. #inc ...

  9. Numpy 生成 Bool型数组、一维转多维数组reshape、多维转一维数组、替换数组元素、提取数组元素、数组交集、差集、过滤数组元素、二维数组反转行、交换数组维度

    1. 创建一个 [3,5] 所有元素为 True 的数组 In [162]: b = np.ones((3,5), dtype=bool)In [163]: b Out[163]: array([[ ...

最新文章

  1. python求txt文件内平均值_使用Python计算.txt文件中的数字的平均值
  2. 摩托罗拉:未来一切以手机为中心
  3. JAX-RS 2.0的新功能– @BeanParam批注
  4. 小程序input实现数据双向绑定
  5. POJ 1852 Ants 分析
  6. python基本符合_python 3-3(2019-11-06 ) Python基础 (三)
  7. 做诗人,其实真的很冤
  8. Nginx URL重写规则配置详解
  9. 购物搜索引擎架构的变与不变
  10. 围棋对杀,为何总是只差一气
  11. python游戏程序代码大全_童年游戏,Python一行代码就能实现!
  12. JavaEye中导入Csdn博客问题
  13. 大数据的价值,主要体现在哪几方面?
  14. 快速搞懂htpp原理
  15. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java面向中小学生的植物科普网站6s4f9
  16. Microsoft Remote Procedure Call Runtime 远程代码执行漏洞(CVE-2022-26809)
  17. 小米便签开源项目本地环境搭建
  18. Python中的sys中的stdout
  19. jpg怎么转换doc
  20. x86、x86-64、x64和amd64的区别(转)

热门文章

  1. ArcGIS Server 中AJAX应用系列(3)
  2. “新基建”横空出世,9本书助你把握7+2大领域风口
  3. Python爬取B站5000条视频,揭秘为何千万人看「哪吒」流泪
  4. STM32之CAN总线原理
  5. STM32之独立看门狗原理
  6. java输入年月输出日历_java输入年份打印该年份的年历
  7. 因让员工加班 去哪儿网被处罚3250元!网友:是不是少了个“万”?
  8. 面试官爱问的10大经典排序算法,20+张图来搞定
  9. pick王菊?作为“菊外人”的程序员能做点什么?
  10. A cycle was detected in the build path of project