2017.8.12
来源:互联网 发布:mp4转gif mac 编辑:程序博客网 时间:2024/06/03 09:11
啦啦啦啦啦啦啦今天继续二分答案
1.luogu2678 跳石头
这个题目的意思就是去掉规定的石头 使最短跳跃距离最大
这个题目就是枚举答案 累计比答案大的 跳跃距离 如果比规定的大 将right赋值为mid 反之 将left赋值为mid
代码附下:
#include<bits/stdc++.h>using namespace std;int L,N,M,D[50010];bool check(int n){ int sum=0,temp=0; for(int i=1;i<=N;i++){ if(D[i]-temp<=n) sum++; else temp=D[i]; } return sum<=M?1:0;}int main(int argc, const char * argv[]) { cin>>L>>N>>M; for(int i=1;i<=N;i++) cin>>D[i]; D[0]=0; int l=1,r=L; while(l<r){ if(M==0){ l=L; break; } int mid=(l+r)/2; if(check(mid)) l=mid+1; else r=mid; } cout<<l<<endl; return 0;}
2.luogu1316 丢瓶盖
这题题意与跳石头类似 但是我卡了好久好久 气死我了!!!!!
原因就是 return true 的时候 函数定义的是 int 就一直一直死循环 看也看不出来 ......无奈
代码附下:
#include<bits/stdc++.h>using namespace std;int a[100010]={0};int n,m,l,r,mid; bool check(int temp){ int s=1,flag=1;for(int i=2;i<=n;i++){ if(a[i]-a[flag]>=temp){ flag=i; s++;}}if(s<m)return false;else return true;}int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)scanf("%d",&a[i]);sort(a+1,a+n+1);l=1;r=a[n];while(l+1<r){mid=(l+r)/2;if(check(mid))l=mid;else r=mid;}if(check(r))printf("%d",r);else printf("%d",l);return 0;}
阅读全文
1 0
- 2017.8.12
- 2017.8.12
- 2017.8.12
- 2017.8.12
- 2017.8.12 总结
- 2017.8.12 总结
- 2017.8.12总结
- (12)2017.8.11-数组
- 不忘初心向前走 2017.8.12 B
- 2017.8
- 2017.8.12在线笔试编程真题总结
- 2017.8.14--2017.8.25
- 2017.8.1
- 2017.8.2
- 2017.8.5
- 2017.8.7
- 2017.8.7
- 2017.8.8
- HDU6113 度度熊的01世界(深搜DFS,2017"百度之星"程序设计大赛
- 1015. Reversible Primes (20)
- 【南阳OJ116】士兵杀敌(二)(线段树)
- 网络协议篇之SNMP协议(一)——SNMP报文协议
- JavaWeb前端该如何学习,推荐一些学习资源和方法(不断更新)
- 2017.8.12
- HDU 6113 度度熊的01世界 dfs
- 堆的实现及堆排序
- 2017/8/12
- 阿里路由框架--ARouter 源码解析之Compiler
- 【Linux】-- ufw 端口操作
- osg 添加纹理
- 内存对齐小解
- Mysql存储过程和函数(六)