第二周周报:预备队训练-week2(二分查找)
我对二分查找的理解是check作为两个部分的分界线,最终L停留在分界线左侧,R停留在分界线右侧。再根据题目取需要的L/R即可。
P1102 A-B 数对
题目背景
出题是一件痛苦的事情!
相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的 A+B Problem,改用 A-B 了哈哈!
题目描述
给出一串正整数数列以及一个正整数 CC,要求计算出所有满足 A - B = CA−B=C 的数对的个数(不同位置的数字一样的数对算不同的数对)。
输入格式
输入共两行。
第一行,两个正整数 N,CN,C。
第二行,NN 个正整数,作为要求处理的那串数。
输出格式
一行,表示该串正整数中包含的满足 A - B = CA−B=C 的数对的个数。
#include <bits/stdc++.h>
using namespace std;
int P[1008611],N,C,flag1,B,L,R,mid,num,flag2;
long long h;
int main()
{
cin>>N>>C;
for(int i=1;i<=N;i++)cin>>P[i];
sort(P+1,P+N+1);
for(int i=1;i<=N;i++)
{
L=lower_bound(P+1,P+N+1,P[i]+C)-&P[1];//把所有元素看作A,在数组中寻找B的首位置
R=upper_bound(P+1,P+N+1,P[i]+C)-&P[1];//寻找B的末位置
h+=R-L;//
}
cout<<h;
}
P1873 [COCI 2011/2012 #5] EKO / 砍树
题目描述
伐木工人 Mirko 需要砍 MM 米长的木材。对 Mirko 来说这是很简单的工作,因为他有一个漂亮的新伐木机,可以如野火一般砍伐森林。不过,Mirko 只被允许砍伐一排树。
Mirko 的伐木机工作流程如下:Mirko 设置一个高度参数 HH(米),伐木机升起一个巨大的锯片到高度 HH,并锯掉所有树比 HH 高的部分(当然,树木不高于 HH 米的部分保持不变)。Mirko 就得到树木被锯下的部分。例如,如果一排树的高度分别为 20,15,1020,15,10 和 1717,Mirko 把锯片升到 1515 米的高度,切割后树木剩下的高度将是 15,15,1015,15,10 和 1515,而 Mirko 将从第 11 棵树得到 55 米,从第 44 棵树得到 22 米,共得到 77 米木材。
Mirko 非常关注生态保护,所以他不会砍掉过多的木材。这也是他尽可能高地设定伐木机锯片的原因。请帮助 Mirko 找到伐木机锯片的最大的整数高度 HH,使得他能得到的木材至少为 MM 米。换句话说,如果再升高 11 米,他将得不到 MM 米木材。
输入格式
第 11 行 22 个整数 NN 和 MM,NN 表示树木的数量,MM 表示需要的木材总长度。
第 22 行 NN 个整数表示每棵树的高度。
输出格式
11 个整数,表示锯片的最高高度。
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;
long long P[1008611],N,C,flag1,B,L,R,mid,num,flag2;
long long l,r;//int小了不能ac
int check(int n)
{
num=0;
for(long long i=1;i<=N;i++)
{
if(P[i]<=n)num+=0;
else num+=P[i]-n;
}
if(num>=L)return 1;
else return 0;
}
int main()
{
cin>>N>>L;
for(long long i=1;i<=N;i++)cin>>P[i];
sort(P+1,P+N+1);
l=0,r=P[N]+1;//边界(0,P[N]+1)
while(l+1!=r)//答案二分
{
mid=(l+r)>>1;
if(check(mid))l=mid;//[1,L]满足木材数量>=M米,则R正好是使得木材数<M米的第一个数
else r=mid;
}
cout<<l;
}
P1824 进击的奶牛
题目描述
Farmer John 建造了一个有 NN(22 \le≤ NN \le≤ 100000100000) 个隔间的牛棚,这些隔间分布在一条直线上,坐标是 x_1x1 ,...,x_NxN (0 \le≤ x_ixi \le≤ 10000000001000000000)。
他的 CC(22 \le≤ CC \le≤ NN) 头牛不满于隔间的位置分布,它们为牛棚里其他的牛的存在而愤怒。为了防止牛之间的互相打斗,Farmer John 想把这些牛安置在指定的隔间,所有牛中相邻两头的最近距离越大越好。那么,这个最大的最近距离是多少呢?
输入格式
第 11 行:两个用空格隔开的数字 NN 和 CC。
第 22 ~ N+1N+1 行:每行一个整数,表示每个隔间的坐标。
输出格式
输出只有一行,即相邻两头牛最大的最近距离。
#include <bits/stdc++.h>
using namespace std;
int A[1008611],B[1008611],l,r,mid,L,R,MID,n,m;
int check(int N)
{
int num=1;
for(int i=1;i<=n;i++)//二分查找下一个符合条件的牛棚
{
L=i-1,R=n+1;
while(L+1!=R)
{
MID=(L+R)/2;
if(A[MID]-A[i]>=N)L=MID;
else R=MID;
}
if(A[L]-A[i]>=N)num++;
i=L-1;//for循环结束后i++l,故-1为敬(这个bug我修了半个小时)
}
//cout<<num<<endl;
if(num>=m)return 1;
else return 0;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>A[i];
sort(A+1,A+n);
l=0,r=A[n]-A[1]+1;
while(l+1!=r)//答案二分
{
mid=(l+r)/2;
//cout<<"mid="<<mid<<endl;
if(check(mid))l=mid;
else r=mid;
//cout<<"l="<<l<<" "<<"r="<<r<<endl;
}
if(check(r))cout<<r;
else cout<<l;
//cout<<"l="<<l<<" "<<"r="<<r<<endl;
}
P2249 【深基13.例1】查找
题目描述
输入 nn 个不超过 10^9109 的单调不减的(就是后面的数字不小于前面的数字)非负整数 a_1,a_2,\dots,a_{n}a1,a2,…,an,然后进行 mm 次询问。对于每次询问,给出一个整数 qq,要求输出这个数字在序列中第一次出现的编号,如果没有找到的话输出 -1−1 。
输入格式
第一行 22 个整数 nn 和 mm,表示数字个数和询问次数。
第二行 nn 个整数,表示这些待查询的数字。
第三行 mm 个整数,表示询问这些数字的编号,从 11 开始编号。
输出格式
输出一行,mm 个整数,以空格隔开,表示答案。
#include <bits/stdc++.h>
using namespace std;
int A[1008611],B[1008611],l,r,mid;
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>A[i];
for(int i=1;i<=m;i++)cin>>B[i];
sort(A+1,A+n+1);
for(int i=1;i<=m;i++)
{
l=0,r=n+1;
while(l+1!=r)
{
mid=(l+r)/2;
if(A[mid]>=B[i])r=mid;
else l=mid;
}
//cout<<"l="<<l<<" "<<"r="<<r<<endl;
if(A[r]!=B[i])cout<<"-1";
else cout<<r;
if(i!=m)cout<<" ";
}
}
P2678 [NOIP2015 提高组] 跳石头
题目背景
一年一度的“跳石头”比赛又要开始了!
题目描述
这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛起点和终点。在起点和终点之间,有 NN 块岩石(不含起点和终点的岩石)。在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达终点。
为了提高比赛难度,组委会计划移走一些岩石,使得选手们在比赛过程中的最短跳跃距离尽可能长。由于预算限制,组委会至多从起点和终点之间移走 MM 块岩石(不能移走起点和终点的岩石)。
输入格式
第一行包含三个整数 L,N,ML,N,M,分别表示起点到终点的距离,起点和终点之间的岩石数,以及组委会至多移走的岩石数。保证 L \geq 1L≥1 且 N \geq M \geq 0N≥M≥0。
接下来 NN 行,每行一个整数,第 ii 行的整数 D_i( 0 < D_i < L)Di(0<Di<L), 表示第 ii 块岩石与起点的距离。这些岩石按与起点距离从小到大的顺序给出,且不会有两个岩石出现在同一个位置。
输出格式
一个整数,即最短跳跃距离的最大值。
#include <bits/stdc++.h>
using namespace std;
int A[1008611],B[1008611],l,r,mid,L,R,MID,n,m,YICHU;
int check(int N)
{
int num=0;
L=0;
for(int i=1;i<=m+1;i++)//挨个查找
{
if(A[i]-A[L]<N)num++;
else L=i;
/*如果相邻的石头间距小于N,num++,此时忽略第i块石头,即此时L仍然是i-1,转为计算i-1与i+1的间距*/
}
//cout<<"num="<<num<<"N="<<N<<endl;
if(num>YICHU)return 0;//如果移除的石头数量num大于题目所给的最大移除数量
else return 1;
}
int main()
{
cin>>n>>m>>YICHU;
if(m==0&&m<=YICHU)
{
cout<<n;
return 0;
}
for(int i=1;i<=m;i++)cin>>A[i];
A[m+1]=n;
sort(A+1,A+m+1);
l=0,r=n+1;
while(l+1!=r)//答案二分
{
mid=(l+r)/2;
// cout<<"mid="<<mid<<endl;
if(check(mid))l=mid;//相当于check是一条线,线左侧是l,右侧是r
else r=mid;
//cout<<"l="<<l<<" "<<"r="<<r<<endl;
}
if(check(r))cout<<r;
else cout<<l;
//cout<<"l="<<l<<" "<<"r="<<r<<endl;
}
第二周周报:预备队训练-week2(二分查找)相关推荐
- Java学习---第二周周报
第二周周报 收获 关于第一周知识的查漏补缺 JDK,JRE,JVM 分别是什么,彼此之间的关系是怎么样的? JDK为Java语言的软件开发工具包,是整个Java的核心:包含JRE和JVM JVM是Ja ...
- 第1天-代码随想录刷题训练| 704二分查找、26移除元素
文章目录 1. 二分查找704 扩展 2.移除元素 2.1数组理论基础 2.2 暴力解法 2.3双指针解法 2.4 扩展题 1. 二分查找704 原题链接 给定一个 n 个元素有序的(升序)整型数组 ...
- 团队大作业第二周周报
团队大任务第二周总结 本周小组分工 咖啡机的物理建模 我,赵宏伟 基于Stateflow设计各个软件模块的控制逻辑和算法 赵言明,吴彦均,方葵 本人完成工作 这周因为我另外参加的UROP项目面临结项答 ...
- 第二周周报(9.13-9.19)
目录 一 .本周任务 二.已完成的任务 1.横向课题 2.上线代码与论文 2.1 代码 2.2 论文 2.3 修改论文 2.4 论文与代码理解 3.跟踪张钹团队成果 4.大概了解人工智能安全方向 4. ...
- 货款违约预测第二周周报
数据分析 上次主要查看了数据的类型以及是否缺失,这次数据分析首先查看各个特征的基本统计量: 知道了各个特征的一些基本统计量之后,先查找出数据中的对象特征和数值特征,再查看缺失数据的多少: 然后用一般的 ...
- (前端学习)寒假第二周周报
本周对css进一步的学习: 附带学习视频的进度 学习了: css的三大特性 特性 作用 继承性 给父元素设置一些属性,子元素也可以使用(只有以color,font-,text-,line开头的可以继承 ...
- NEFU 大一寒假训练六(二分查找)题目预测
说明 预测原理还是基于这篇文章:NEFU OJ 比赛试题预测 (Python) 为防止格式更正导致文章进入待审核状态,所以今天晚上就不修正格式了 如果有格式问题请自行理解,问题产生主要与Markdow ...
- XUPT_ACM2021寒假训练第二周练习记录
试题链接:第二周训练题 - Virtual Judge 这周事情比较多,没有把20道题全部写完,只写了14道题. 目录 B - 补提交卡 C - 热血格斗场 D - 背包包 E - 数列极差 G - ...
- (王道408考研数据结构)第七章查找-第二节2:二分查找及其判定树
文章目录 一:二分查找法基本思想 二:二分查找法代码 三:二分查找法效率分析 三:二分查找判定树的构造 (1)规律 (2)构造 (3)特点 (4)时间复杂度 一:二分查找法基本思想 二分查找法(Bin ...
- DICTATOR第一周二分查找作业
[有序数组]二分查找(C语言实现) 本文章仅供提交作业与课内交流使用,并无参考借鉴价值 //Author DICTATOR //这是对有序数组进行二分查找的代码#include<stdlib.h ...
最新文章
- Git commit message和工作流规范
- 【数字智能三篇】之一: 一页纸说清楚“什么是大数据”
- 长春理工大学第十四届程序设计竞赛
- 【渝粤教育】国家开放大学2018年秋季 1021t劳动与社会保障法 参考试题
- 产品经理,如何降噪学习?
- 终端传感了解吗?18个知识点为你扫盲
- 牛逼!终于有人开源了一份基于SSM框架实现了支付宝支付功能的完整源代码......
- manjaroLinux下安装mysql时初始化mysql出错解决办法
- 【JavaScript脚本编程技术详解-----(一)】
- mysql性能优化总结详解:MySQL数据库从原理到高性能实战
- 【数据结构】约瑟夫问题
- android 字体倒影,Android实现图片的倒影效果
- 阿里云天池机器学习task3
- Windows10 桌面不停的闪烁问题
- 运用电脑辅助 对彩票号码 进行 数字分析 — 华东15选5
- python32位与62位可以随便装吗_电脑32位和64位可以随便换吗???
- 快速理解数据库超键,候选键,主键
- VS2005中文版下载地址和msdn_vs2005中文版
- 进程的通信 - 剪切板
- 基于轮廓发现的几何形状识别