传送门

题意

分析

这是我在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;
}

最新文章

  1. Java Maps的9个常见问题
  2. SCCM 客户端的修复
  3. JAVA中保留指定小数位方法
  4. mvc 分页js
  5. DemoExample
  6. ANDROID_MARS学习笔记_S01原始版_001_Intent
  7. Oauth认证简介
  8. MVC三层架构编程(Dao、service、servlet 之间的关系)
  9. [转]Installing Snow Leopard (Client) on VMware Fusion 6.0.3
  10. angular学习(五)-- Module
  11. Spring中AOP简介与切面编程的使用
  12. opencv源码学习: getGaussianKernel( 高斯核);
  13. 【Java】 剑指offer(8) 用两个栈实现队列
  14. 检查jdk版本
  15. EsayUI + MVC + ADO.NET(工作单元)
  16. Spring中property-placeholder的使用与解析
  17. oracle一些笔记
  18. Linux下Rsync+Inotify-tools实现数据实时同步
  19. TryParse用法
  20. Web界面设计(Designing Web Interfaces中文版) (美)斯科特 pdf扫描版​

热门文章

  1. 【Objective-C】09-空指针和野指针
  2. &lt;bgsound&gt; - 背景音乐
  3. UVA 11246 - K-Multiple Free set(数论推理)
  4. poj1703 Find them,Catch them 【并查集】
  5. ConcurrentHashMap源代码解析
  6. 程序设计之另一种读写函数---writev,readv
  7. Android实现RecyclerView的下拉刷新和上拉载入很多其它
  8. String,StringBuilder与StringBuffer的区别
  9. 使用tencent协议发起临时会话
  10. phpexcel导出后乱码或者是打不开文件必须修复的问题