qduoj 218 签到题
Description
a坤和大明在一块由n个方块组成的棋盘(1 × n)上做游戏.一开始a坤在棋盘上放了k个矩形并且没有告诉大明具体位置.每个矩形都占a个连续方块(1 × a),任意两个矩形不可重叠且任意两个矩形至少间隔为1.保证没有矩形超出棋盘范围.之后大明开始进行射击,每当大明射向一个方块时,a坤都会告诉他打没打中.那么问题来了,a坤这个人素质有些问题,就很喜欢骗人,所以他总是告诉大明没打中.你要帮大明抓a坤的现行--a坤第一次可以被确认的撒谎发生在大明第几次射击.
Input
多组输入输出,第一行三个整数n,k,a(1 ≤ n, k, a ≤ 2·1e5),分别代表棋盘大小,矩形数量以及每个矩形的大小.保证能够把k个矩形(1 × a)全部按要求放入棋盘内(1 × n).第二行一个整数m,代表小明的射击次数.第三行m个整数p1,p2,...,pm(1 ≤ pi ≤ n),分别代表第i次的射击位置为pi.
Output
输出一个整数.如果能抓到a坤现行,就输出大明是在第几次可以确认a坤作弊的,否则输出-1.
Sample Input 1
- 11 3 3
- 5
- 4 8 6 1 11
Sample Output 1
- 3
Sample Input 2
- 5 1 3
- 2
- 1 5
Sample Output 2
- -1
Sample Input 3
- 5 1 3
- 1
- 3
Sample Output 3
- 1
- 二分判断,对于给出的一些没射中的点,在他们之间可以放下多少个矩形,如果数量小于k就表示说谎啦,但是不能排着去查会超时,所以需要二分 ,找到小于k的最靠前位置。可以一开始先判断如果m个数都知道是否可以判断其说谎,如果可以展开二分,如果不可以直接-1.
set代码:
- #include <iostream>
- #include <cstdio>
- #include <set>
- using namespace std;
- int n,k,a,m,d,s[];
- int get(int t) {
- int last = ,ans = ;
- set<int> p;
- p.insert(n + );
- for(int i = ;i <= t;i ++) {
- p.insert(s[i]);
- }
- for(set<int>::iterator it = p.begin();it != p.end();it ++) {
- ans += (*it - last) / (a + );
- last = *it;
- }
- return ans;
- }
- int main() {
- while(~scanf("%d%d%d",&n,&k,&a)) {
- scanf("%d",&m);
- for(int i = ;i < m;i ++) {
- scanf("%d",&s[i]);
- }
- int l = ,r = m - ,mid;
- if(get(m - ) >= k)l = -;
- else
- while(l < r) {
- mid = (l + r) / ;
- if(get(mid) >= k)l = mid + ;
- else r = mid;
- }
- printf("%d\n",l + );
- }
- }
排序代码:
- #include <iostream>
- #include <cstdio>
- #include <algorithm>
- using namespace std;
- int n,k,a,m,d,s[],s1[];
- int get(int t) {///查看前t次给出的点 中间空隙可以放下几个矩形。
- int last = ,ans = ;
- for(int i = ;i <= t;i ++) {
- s1[i] = s[i];
- }
- s1[t + ] = n + ;///作为最后的边界,这样可以查看所有的边界
- sort(s1,s1 + t + );///从小到大排序
- for(int i = ;i <= t + ;i ++) {
- ans += (s1[i] - last) / (a + );///除以a + 1是因为两个矩形之间间隔至少为1 而且s1[i] - last的值实际比间隔长度多1
- last = s1[i];///last是上个点 初始为0点
- }
- return ans;
- }
- int main() {
- while(~scanf("%d%d%d",&n,&k,&a)) {
- scanf("%d",&m);
- for(int i = ;i < m;i ++) {
- scanf("%d",&s[i]);
- }
- int l = ,r = m - ,mid;
- if(get(m - ) >= k)l = -;///m个点之间可以放下k个矩形 就无法判断说谎
- else
- while(l < r) {///二分查找刚好放不下k个的时候
- mid = (l + r) / ;
- if(get(mid) >= k)l = mid + ;
- else r = mid;
- }
- printf("%d\n",l + );
- }
- }
qduoj 218 签到题的更多相关文章
- QDUOJ 来自xjy的签到题(bfs+状压dp)
来自xjy的签到题 Description 爱丽丝冒险来到了红皇后一个n*n大小的花园,每个格子由'.'或'#'表示,'.'表示爱丽丝可以到达这个格子,‘#’表示爱丽丝不能到达这个格子,爱丽丝每1 ...
- A 洛谷 P3601 签到题 [欧拉函数 质因子分解]
题目背景 这是一道签到题! 建议做题之前仔细阅读数据范围! 题目描述 我们定义一个函数:qiandao(x)为小于等于x的数中与x不互质的数的个数. 这题作为签到题,给出l和r,要求求. 输入输出格式 ...
- fjwc2019 D3T1 签到题 (贪心)
#184. 「2019冬令营提高组」签到题 每次询问接近O(1).......考虑贪心 怎么贪心呢? 对于相邻的两个数,我们要保证异或x后单调不降 我们找到两个数二进制上最高的相异位 当左边的数相异位 ...
- CTF-练习平台-WEB之 签到题
一.签到题 根据提示直接加群在群公告里就能找到~
- 洛谷P3601签到题(欧拉函数)
题目背景 这是一道签到题! 建议做题之前仔细阅读数据范围! 题目描述 我们定义一个函数:qiandao(x)为小于等于x的数中与x不互质的数的个数. 这题作为签到题,给出l和r,要求求. 输入输出格式 ...
- 【洛谷九月月赛T1】签到题(bsgs)(快速乘)
说好的签到题呢qwq....怎么我签到题都不会啊qwq 之后看了bsgs才发现貌似不是那么那么难fake!!什么东西... 先贴上部分分做法(也就是枚举1的个数,然后每一步都进行取模(这和最后取模结果 ...
- WEB新手之签到题
写一写web新手赛的题. 这是签到题,开始时需要耐心等待页面中字母全部出现. 字母全部出现后,会跳转到另一个界面,如上图所示.F12没什么特别的地方,这题应该有点难度. 按往常一样,先抓包. 按英文提 ...
- EOJ Monthly 2019.1 唐纳德先生与这真的是签到题吗 【数学+暴力+multiset】
传送门:https://acm.ecnu.edu.cn/contest/126/ C. 唐纳德先生与这真的是签到题吗 单测试点时限: 6.0 秒 内存限制: 1024 MB 唐纳德先生在出月赛的过程中 ...
- HLJU 1221: 高考签到题 (三分求极值)
1221: 高考签到题 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 9 Solved: 4 [Submit][id=1221">St ...
随机推荐
- jquery 使用笔记
一下是在做项目中用到jquery涉及到的一些知识点,把源码复制过来,省得以后忘记了: <link href="<%=request.getContextPath()%>/c ...
- LLVM编译器
LLVM 1. 说说 LLVM(Low Level Virtual Machine)到底是什么吧 先说编译器:编译器是把程序员的代码翻译成机器可以理解的语言的工具: 再谈 LLVM:一个模块化和可重用 ...
- YY大厅接受不到documentcompleted事件处理
多玩大厅在接受到了页面的documentcompleted事件,才会把遮在页面前面的YY游戏中去掉,我们的游戏页面,YY大厅接收不到事件,所以就排查了下 发现原因在于js脚本里有个用iframe做上报 ...
- Linux内核设计基础(九)之进程管理和调度
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/BlueCloudMatrix/article/details/30799225 在Linux中进程用 ...
- 很详细、很移动的Linux makefile 教程
近期在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了以下这篇文章.通俗易懂.然后把它贴出 ...
- 读paper:Deep Convolutional Neural Network using Triplets of Faces, Deep Ensemble, andScore-level Fusion for Face Recognition
今天给大家带来一篇来自CVPR 2017关于人脸识别的文章. 文章题目:Deep Convolutional Neural Network using Triplets of Faces, Deep ...
- iOS JSON 和 Mode l转换
MJExtension 是我们项目开发常用的一个第三方框架 很好用. https://github.com/CoderMJLee/MJExtension 映射 json value key 直 ...
- Java多线程系列 JUC线程池06 线程池原理解析(五)
ScheduledThreadPoolExecutor解析 ScheduledThreadPoolExecutor适用于延时执行,或者周期性执行的任务调度,ScheduledThreadPoolExe ...
- Java多线程系列 JUC线程池04 线程池原理解析(三)
转载 http://www.cnblogs.com/skywang12345/p/3509954.html https://blog.csdn.net/qq_22929803/article/det ...
- shell 批量创建_备份 mysql 数据库 表
#!/bin/bash user=root password= socket=/var/lib/mysql/mysql.sock mycmd="mysql -u$user -p$passwo ...