传送门

题意

分析

这是我在51nod上的第2题,下载了4个数据,得不偿失?我太菜啦

一开始wa了6个点,下数据后发现舰与舰不能相邻,再交wa,发现l和r都没设好,再wa,发现check里面[1,b[1]]的判断写错了QAQ

此题二分[1,m],每次将[1,mid]的数排序,计算可放舰的数量,与k比较

trick

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; int n,k,len;
int m;
int a[200200],b[200200]; int check(int loc)
{
int cnt=0;
for(int i=1;i<=loc;++i) b[i]=a[i];
sort(b+1,b+1+loc);
//for(int i=1;i<=loc;++i) printf("%d%c",b[i],i==loc?'\n':' ');
for(int i=2;i<=loc;++i)
{
if(b[i]-b[i-1]-1<len) continue;
cnt+=(b[i]-b[i-1])/(len+1);
}
cnt+=(b[1])/(len+1);
if((n-b[loc])>=len) cnt+=(n-b[loc]+1)/(len+1);
//printf("loc=%d cnt=%d\n",loc,cnt);
return cnt>=k;
} int main()
{
freopen("51nod_Problem_1521_Test_15_In.txt","r",stdin);
scanf("%d %d %d",&n,&k,&len);
scanf("%d",&m);
for(int i=1;i<=m;++i) scanf("%d",a+i);
//sort(a+1,a+1+m); int l=1,r=m;
while(l+1<r)
{
int mid=(l+r)>>1;
if(check(mid)) l=mid+1;else r=mid;
} //if(check(l)) printf("%d\n",l);else printf("%d\n",r);
//int mid=(l+r)>>1;
//printf("l=%d r=%d\n",l,r);
if(check(l)==0) printf("%d\n",l);
else if(check(r)==0) printf("%d\n",r);
else if(r<m) printf("%d\n",r+1);
else puts("-1");
return 0;
}

51 nod 1521 一维战舰(二分)的更多相关文章

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

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

  2. 51Nod 1521 一维战舰

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1521 思路:先计算出一开始最多能放多少艘战舰,然后每次输入一个点后,找到 ...

  3. 51 Nod 一维战舰

    1521 一维战舰  题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 爱丽丝和鲍博喜欢玩一维战舰的游戏.他们在一行 ...

  4. 51 nod 1421 最大MOD值

    1421 最大MOD值 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 有一个a数组,里面有n个整数.现在要从中找到两个数字(可以 ...

  5. 51 nod 1766 树上的最远点对(线段树+lca)

    1766 树上的最远点对 基准时间限制:3 秒 空间限制:524288 KB 分值: 80 难度:5级算法题   n个点被n-1条边连接成了一颗树,给出a~b和c~d两个区间,表示点的标号请你求出两个 ...

  6. 【51nod-1521】一维战舰

    爱丽丝和鲍博喜欢玩一维战舰的游戏.他们在一行有n个方格的纸上玩这个游戏(也就是1×n的表格). 在游戏开始的时候,爱丽丝放k个战舰在这个表格中,并不把具体位置告诉鲍博.每一只战舰的形状是 1×a 的长 ...

  7. 51 nod 1439 互质对(Moblus容斥)

    1439 互质对 题目来源: CodeForces 基准时间限制:2 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 有n个数字,a[1],a[2],…,a[n].有一个集合,刚开 ...

  8. 51 nod 1495 中国好区间

    1495 中国好区间 基准时间限制:0.7 秒 空间限制:131072 KB 分值: 80 难度:5级算法题   阿尔法在玩一个游戏,阿尔法给出了一个长度为n的序列,他认为,一段好的区间,它的长度是& ...

  9. 51 nod 1427 文明 (并查集 + 树的直径)

    1427 文明 题目来源: CodeForces 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 160 难度:6级算法题   安德鲁在玩一个叫“文明”的游戏.大妈正在帮助他. 这个游 ...

随机推荐

  1. svn简单介绍

    版本号控制(Revision control)是维护project蓝图的标准做法,能追踪project蓝图从诞生一直到定案的过程.是一种记录若干文件内容变化.以便将来查阅特定版本号修订情况的系统. 能 ...

  2. hdu 5338 ZZX and Permutations (贪心+线段树+二分)

    ZZX and Permutations Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/O ...

  3. Effective C++ 条款二 用编译器替换预编译器

    /************************************************************************/ /* C++条款二:用编译器替换预编译器 */ / ...

  4. 基于jquery 全选、反选、各行换色、单击行选中事件实现代码

    <script language="javascript"> $(document).ready(function(){ //各行换色 $('table tr:odd' ...

  5. AIX下RAC搭建 Oracle10G(二)主机配置

    AIX下RAC搭建系列 AIX下RAC搭建 Oracle10G(二)主机配置 环境 节点 节点1 节点2 小机型号 IBM P-series 630 IBM P-series 630 主机名 AIX2 ...

  6. javascript Array method总结

    0.创建 Javascript创建数组的基本方式有两种.第一种是使用Array构造函数. var colors = new Array(); var colors = new Array(20); v ...

  7. Ubuntu E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)

    E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它? 不要删掉这些目录!! ...

  8. mtk机型的一次救砖经历

    在recovery里清除了data,cache,system三个分区,没有刷机,重启到bootloader,准备另刷recovery. 有急事走开了,回来时发现手机黑屏,无论什么组合键都没反应,以为是 ...

  9. 记录魅族m1note编译TWRP recovery 3.1.0-0,包括mtk机型的处理方法

    1.安装64位linux系统,我用的是deepin os 15.3 2.将系统升级到最新版本 sudo apt-get update && sudo apt-get upgrade 3 ...

  10. java内部类的一些看法

    java内部类, 我在看<thinking in java>的时候总感觉模棱两可的, 挣扎了好几天之后, 感觉有一部分的问题想的清楚了, 写一个随笔记录一下, 以备以后修改和查看 什么是内 ...