c++专题二

news/2025/1/26 18:29:01/文章来源:https://www.cnblogs.com/sssyyyqqq/p/18692042

c++专题二学习日记

二分法

1.基本模版

(1)l<=r
int l,r,ans;while(l<=r){int mid=l+r >> 1;if(check(mid)) ans=mid,l=mid+1;else  r=mid-1;}return ans;
(2)l<r
int l,r;while(l<r){int mid=l+r+1 >>1;if(check(mid)) l=mid;else  r=mid-1;}return l;

or

while(l<r){int mid=l+r-1 >>1;if(check(mid))r=mid;else  l=mid+1;}return r;

2.做题

(1)A-B数对

image-20250126170946938

应该用二分查找符合A=B+C的A,不过我用了map就不改了

int main(){int n,c;cin>>n>>c;unordered_map<int,int> numbers;long long count=0;vector<int> a(n);int i;for(i=0;i<n;i++){cin>>a[i];numbers[a[i]+c]+=1;}sort(a.begin(),a.end());    //用algorithm中的sort排序数组afor(i=0;i<n;i++){count+=numbers[a[i]];}
cout<<count<<endl;return 0;
}
(2)抄书

image-20250126172200261

思路:

[1]用贪心算法来check找到的mid可不可行(第1个人抄,抄到超过mid后换下一个人抄,以此类推;

[2]用二分找到mid;

[3]因为要让前面的人少抄,贪心要从后往前走

#include<iostream>
using namespace std;
const int K=500;
int m,k,mid;
int a[K+10],s[K+10],ed[K+10];
bool check(int mid){           //[1]int cnt=1,now=mid;int i;for(i=1;i<=m;i++){if(a[i]>now){cnt++;i--;now=mid;}elsenow-=a[i];}return cnt<=k;
}
int main(){cin>>m>>k;int i,max=0,sum=0;for(i=1;i<=m;i++){cin>>a[i];if(a[i]>max)max=a[i];sum+=a[i];}int l=max,r=sum;while(l<r){                   //[2]mid=(l+r-1) >> 1;if(check(mid)){r=mid;}elsel=mid+1;}ed[k]=m;s[1]=1;int j,now=r;                  //[3]for(i=k,j=m;i>0;i--){for(;now>=a[j]&&j>0;j--){now-=a[j];}s[i]=j+1;ed[i-1]=j;now=r;}for(i=1;i<=k;i++){cout<<s[i]<<' '<<ed[i]<<endl;}return 0;}
(3)青蛙过河

image-20250126173344235

思路:

假设青蛙跳跃长度为y,那么对任意一个区间[l,l+y-1],高度和一定大于2x。如果每段高度和都大于2x,那么对于0~n的任意一点a,都有大于等于2x种途径跳上a,所以只要保证任意一段长度为y的区间,高度和大于2x,青蛙跳跃能力为y时就可以上岸。

#include<iostream>
using namespace std;
const int N=100005;
int n,x;
int h[N];
long long s[N];
int l,r,mid;
bool check(int mid){int i;for(i=0;i+mid-1<n;i++){int j=i+mid-1;if(s[j]-s[i-1]<2*x)return false;}return true;
}
int main(){								//前缀和:cin>>n>>x;							  sum[1]=h[1]int i;								  sum[2]=h[1]+h[2]for(i=1;i<n;i++){					  sum[3]=h[1]+h[2]+h[3]...cin>>h[i];						s[i]=s[i-1]+h[i];				  [L,R]=sum[R]-sum[L-1]}l=1;r=n;while(l<r){mid=l+r >> 1;if(check(mid))r=mid;elsel=mid+1;}cout<<l<<endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/876047.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java基础学习(十)

Java基础学习(十):集合 目录Java基础学习(十):集合概念数据结构泛型CollectionListArrayListLinkedListSetHashSetLinkedHashSetTreeSet 本文为个人学习记录,内容学习自 黑马程序员概念数组长度固定,不够灵活,因此出现了集合集合 vs 数组长度:数组的长度固定,集合长…

Java基础学习(十一)

Java基础学习(十一):常见算法 目录Java基础学习(十一):常见算法查找算法排序算法 本文为个人学习记录,内容学习自 黑马程序员查找算法七大查找算法:基本查找(顺序查找)、二分查找(折半查找)、插值查找、斐波那契查找、分块查找、数表查找、哈希查找基本查找核心:从…

[2025.1.26 MySQL学习] 存储引擎

存储引擎 MySQL体系结构图

范围修改查询问题

范围修改查询问题 http://www.nfls.com.cn:10611/up/paper/国家集训队2024论文集.pdf P63 引入 这部分作者定义了半群和幺半群来描述一般的线段树可以做到的结构半群:结合律幺半群:结合律、有幺元交换半群:结合律、交换律形式化问题:(以下是通俗易懂的版本)给定交换半群 …

实现超图S3M数据在Ceisum中的解析、加载

使用超图提供的S3M加载模块。参考文档:S3M_JS使用方法 1. 将项目的Cesium库的Build目录及其内容放在S3M_JS目录中,与S3M_module同级。2. 调用该模块解析、加载S3M数据 const layer = new S3MTilesLayer({context: window.viewer.scene._context,url }) window.viewer.scene.p…

Beyond Compare(文件比较工具) v5.0.5.30614 多语便携版

Beyond Compare是一款功能强大的文件和文件夹比较工具,它能够快速准确地比较文件之间的差异,并提供了一系列强大的功能和工具来帮助用户进行文件和文件夹的同步、合并和备份。 软件功能 - 文件和文件夹比较:Beyond Compare能够快速准确地比较两个文件或文件夹之间的差异,包…

使用EarTrumpet代替windows默认的音量调节功能

前言 https://github.com/File-New-Project/EarTrumpet Windows 默认的音量调节功能挺弱的,要分别调节各个应用的音量得进入二级菜单,麻烦得很 有了这个功能就很方便了 截图安装 老规矩,Github、Microsoft Store、choco、scoop都行 我选的是 scoop 扩展:替换系统的音量控制…

JS-43 document对象_方法/创建元素

document创建元素:createElement(创建元素)createTextNode(创建元素文本)createAttribute(创建元素的属性) 1、document.createElement()document.createElement方法用来生成元素节点,并返回该节点var newDiv=document.createElement(div); 2、document.createTextNode()…

Keydd : 流量包匹配敏感信息的工具

免责声明 工具仅供安全研究与学习之用,若将工具做其他用途,由使用者承担全部法律及连带责任,作者及发布者不承担任何法律及连带责任。信息及工具收集于互联网,真实性及安全性自测!!!​ 项目介绍 一直在使用一些工具插件,来检测流量中的ak、sk、sfz、敏感信息,但是网上…

使用twinkle-tray快捷调整多个显示器的亮度

前言 自从安装了这个小工具,我再也没用过笔记本键盘上的快捷键了~ 介绍Twinkle Tray enables brightness control on external displays in Windows 10 & 11. Even though Windows is capable of adjusting the backlight on most monitors, it doesnt support external m…

ACM寒假集训第二次作业

二分查找 思路 运用二分查找,逐渐逼近所要查找的数字 代码 #include<iostream> using namespace std; int binary_search(int arr[],int l,int r,int x){int mid;while(l<r){mid=(l+r)>>1;if(arr[mid]>=x) r=mid;else l=mid+1;}return arr[l]; }; int main(…

【Java安全】保护Java应用程序:如何嗅探JVM的变量

在这篇文章中,我们回顾如何嗅探JVM的变量可能的方法。这篇文章的主要目的是解释如何保护你的应用程序。计划是进行下一步的攻击。从Dump中读取敏感数据。通过在外部依赖中注入恶意软件来窃取源代码。从Java Dump中窃取数据, 如果有人获得了对Java进程的访问权,他可能会读取敏…