当前位置: 首页 > news >正文

洛谷 P1824 【进击的奶牛】

我写了个set版本的O_O

二分的细节方面很让人头疼,我用”//zy“(注意)标注了一些细节O_O

#include<cstdio>
#include<iostream> #include<iterator> #include<set> #include<algorithm> using namespace std; int n,c; set<int> oxro; set<int>::iterator it=oxro.end(); bool check(int dis){ int last=*oxro.begin(),niu=0;//zy for(it=oxro.begin(),it++;it!=oxro.end();it++){//zy if(*it-last>=dis){ niu++; last=*it; } if(niu>=c)return 1; } if(niu+1<c)return 0;//zy//zy return 1; } int main(){ scanf("%d%d",&n,&c); for(int i=1;i<=n;i++){ int room; scanf("%d",&room); oxro.insert(room); } int l=1,r=*(--it)-*oxro.begin();//zy while(l<=r){//zy int mid=(l+r)>>1; if(check(mid))l=mid+1; else r=mid-1; } printf("%d\n",r);//zy }


细节方面也可以这样写,也通过了:

#include<cstdio>
#include<iostream> #include<iterator> #include<set> #include<algorithm> using namespace std; int n,c; set<int> oxro; set<int>::iterator it=oxro.end(); bool check(int dis){ int last=*oxro.begin(),niu=1;//niu=1注意 for(it=oxro.begin(),it++;it!=oxro.end();it++){//zy if(*it-last>=dis){ niu++; last=*it; } if(niu>=c)return 1; } return 0; } int main(){ scanf("%d%d",&n,&c); for(int i=1;i<=n;i++){ int room; scanf("%d",&room); oxro.insert(room); } int l=0,r=*(--it)-*oxro.begin()+1;//zy int mid; while(l<=r){//zy mid=(l+r)>>1; if(check(mid))l=mid+1; else r=mid-1; } printf("%d\n",r);//zy }

解析

part1 什么是二分,本题怎么用(萌新模板)

    //不久前,本蒟蒻终于明白了:二分就是暴力,优化的暴力O_O
    //注意:二分的有些细节问题,例如循环条件到底要不要加'=',一定要编数据多调试!!!(其实对于本蒟蒻,往往会因为这些点磨叽很久...多多尝试吧!!!)
    //对于"最大值的最小值","最小值的最大值"之类的题一般都是用二分。
    //例如本题为"最小值的最大值",通过"二分"的方式来枚举"最大值"的可能值。(如果枚举出的mid符合条件,那我们再搜一搜有没有比mid大的值也符合条件O_O) 

part2 如何判断枚举出的"最大值"是否符合条件(二分题关键)

    //我看了看楼下的题解,主要的方法有两种:
    //1.保证距离与牛栏数,看能否放下c头牛 (我用的是这种)
    //2.保证距离与牛数,看需要多少牛栏 
    //注意:某些东西在循环里return貌似是有那么一点点快O_O 

2018/11/14更新:

1.set的版本在windows下的oj中不一定能过,有可能会超时。
2.有一个点必须要注意:最后要输出r,因为r在r、l、mid中理论上是最大的,否则大部分WA

转载于:https://www.cnblogs.com/Y15BeTa/p/luogu1824.html

相关文章:

  • 自学自用 = B站(操作系统_清华大学(向勇、陈渝))1
  • Docker下部署自己的LNMP工作环境
  • Docker-01-使用镜像
  • C# 分割字符串
  • LDM和STM指令
  • java B2B2C Springcloud电子商城系统-搭建一个简单的Eureka程序
  • 传闻 Android Q 将支持手机应用版本回滚
  • MD5加密原理解析及OC版原理实现
  • linux环境安装golang
  • 国际乒联2月世界排名:樊振东、丁宁持续领跑
  • 李嘉诚23岁长孙女登场接班!出任地产公司董事,照片曝光气质获赞
  • Nginx实现动静分离
  • Java基础教程,第四讲,字符串使用以及常用字符串处理函数
  • 树链剖分算法解析
  • 数据库还原失败System.Data.SqlClient.SqlError: 无法执行 BACKUP LOG,因为当前没有数据库备份...
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • JavaScript HTML DOM
  • JS笔记四:作用域、变量(函数)提升
  • Mocha测试初探
  • Python - 闭包Closure
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • elasticsearch-head插件安装
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • #1015 : KMP算法
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (20050108)又读《平凡的世界》
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (二)换源+apt-get基础配置+搜狗拼音
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (七)c52学习之旅-中断
  • (转)memcache、redis缓存
  • (转载)利用webkit抓取动态网页和链接
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .net与java建立WebService再互相调用
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • @ConditionalOnProperty注解使用说明
  • [17]JAVAEE-HTTP协议
  • [Angular] 笔记 8:list/detail 页面以及@Input
  • [autojs]逍遥模拟器和vscode对接
  • [CF]Codeforces Round #551 (Div. 2)
  • [Codeforces] combinatorics (R1600) Part.2
  • [c语言]小课堂 day2
  • [dart学习]第四篇:函数
  • [GXYCTF2019]禁止套娃
  • [IE编程] 打开/关闭IE8的光标浏览模式(Caret Browsing)
  • [ISCTF 2023]——Web、Misc较全详细Writeup、Re、Crypto部分Writeup
  • [leetcode] Balanced Binary Tree
  • [LeetCode]—Implement strStr() 寻找子串匹配第一个位置 (KMP)
  • [loj#115] 无源汇有上下界可行流 网络流
  • [MAC OS] 常用工具