第二轮easy~hard题目

news/2025/1/26 18:39:04/文章来源:https://www.cnblogs.com/tolskar/p/18691769

题目1

代码

#include<iostream>
#include<vector>
using namespace std;
vector<int> num;
int mybsearch(int l, int r, int x)
{while (l < r) {int mid = (l + r )>> 1;if (num[mid] >= x) r = mid;else l = mid + 1;}return l;
}
int main()
{int n,q,t;cin >> n;for (int i = 0; i < n; i++) {cin >> t;num.push_back(t);}cin >> q;for (int i = 0; i < q; i++) {cin >> t;if (t == num[mybsearch(0, n - 1, t)]) cout << "Yes" << endl;else cout << "No" << endl;}
}

解题思路

  就是简单的二分查找,套模板就行。


题目2

代码

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<long long> num;
long long cnt;
long long mybsearch(long long l, long long r, long long x) {while (l < r) {long long mid = (l + r )>> 1;if (num[mid] >= x) r = mid;else l = mid + 1;}return l;
}
int main()
{long long N,C,t,j,k;cin>>N>>C;for(long long i=0;i<N;i++){cin>>t;num.push_back(t);}sort(num.begin(),num.end());for(long long i=0;i<N;i++){t=num[i];t+=C;j=mybsearch(i+1,N-1,t);//while(num[j]==t){//	cnt++;//	j++;//}k=mybsearch(i+1,N-1,t+1);if(num[j]==t&&num[k]>t){cnt+=k-j;}else if(num[j]==t&&num[k]==t){cnt+=k-j+1;}}cout<<cnt;//cout<<mybsearch(0,N-1,4);
}

解题思路

  先求B+C,再用二分法找对应位置是否有A等于B+C,找到一个后继续往后找,直到没有为止,统计数量。注意数据量大,建议都开long long。


题目3

代码

#include<iostream>
#include<vector>
using namespace std;
vector<int> H,L;
bool check(int mid,int n,int k){int cnt=0;int a,b;for(int i=1;i<=n;i++){a=H[i]/mid;b=L[i]/mid;cnt+=a*b;}if(cnt>=k) return true;else return false;
}
int work(int r,int l,int n,int k){int Ans;while(l<=r){int mid=(l+r)/2;if(check(mid,n,k)){Ans=mid;l=mid+1;}else r=mid-1;}return Ans;
}
int main()
{int N,K,a,b;int l=1,r=1e5,Ans;cin>>N>>K;H.push_back(0);L.push_back(0);for(int i=0;i<N;i++){cin>>a>>b;H.push_back(a);L.push_back(b);}Ans=work(r,l,N,K);cout<<Ans;
}

解题思路

  假设切出边长为mid的正方形,设边长的范围是1到105,用二分法找出符合条件的最大的mid,保证最后切出的巧克力边长最大。


题目4

代码

#include<iostream>
#include<vector>
using namespace std;
using int64=long long;
vector<int64> a,b;
int64 n,m;
bool check(int64 mid){int64 sum=0;for(int64 i=1;i<=n;i++){if(a[i]+b[i]<mid) return false;if(a[i]<mid) sum+=mid-a[i];}if(sum<=m) return true;else return false;
}
int work(int64 l,int64 r)
{int64 Ans;while(l<=r){int64 mid=(l+r)/2;if(check(mid)){Ans=mid;l=mid+1;}else r=mid-1;}return Ans;
}
int main()
{int64 l,r,t;cin>>n>>m;a.push_back(0);b.push_back(0);l=0;r=1e10;for(int64 i=1;i<=n;i++){cin>>t;a.push_back(t);}for(int64 i=1;i<=n;i++){cin>>t;b.push_back(t);}cout<<work(l,r);
}

解题思路

  找出最大值,设凑出的牌套数范围0到1010,带入mid进行二分,如果手写的牌数和原有的牌数相加都比mid小,说明这个mid太大,要排除,如果相加大于mid,说明手写的够用,手写的牌数累计到sum里,最后将sum和m进行比较,如果sum小于m,说明该方案可行,套模板最后找出最大的mid。


题目5

代码

#include<iostream>
#include<vector>
#define int long long
using namespace std;
int m,k;
int beg[1000],fin[1000],a[1000];
bool check(int mid)
{int cnt,p;cnt=1;p=mid;for(int i=1;i<=m&&cnt<=k;i++){if(a[i]>p){cnt++;i--;p=mid;}else p-=a[i];}return cnt<=k;
}
int work(int r,int l)
{int Ans=0;while(l<=r){int mid=(l+r)/2;if(check(mid)){Ans=mid;r=mid-1;}else{l=mid+1;}}return Ans;
}
signed main()
{cin>>m>>k;int l=0,r=0,t;for(int i=1;i<=m;i++){cin>>t;r+=t;a[i]=t;}l=work(r,l);fin[k]=m;beg[1]=1;for(int i=k,j=m,now=l;i>0;i--){while(now>=a[j]&&j){now-=a[j];j--;}beg[i]=j+1;fin[i-1]=j;now=l;}for(int i=1;i<=k;i++){cout<<beg[i]<<' '<<fin[i]<<'\n';}
}

解题思路

  前面的人少抄写=后面的人多抄写,所以我们从最后一个人,最后一本书开始安排抄书方案,在抄写时间不超过T的情况下,令每个人抄写尽可能多的页数。这样如果存在多余的空闲时间,则会分配到前面的人上。


题目6

代码

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
typedef long long LL ;
using namespace std;
const int N = 100010;
typedef pair<int ,int > PII;int n,x;
int a[N];//找到最小的y使得所有长度为y的区间和大于等于2Xint check(int y){int S = 2*x;for(int i=1; i+y-1 < n ;i++){if(a[i+y-1]-a[i-1] < S) return 0;}return 1;
}
int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin >> n >> x;for(int i=1;i<n;i++) {cin >> a[i];a[i] += a[i-1];}int l = 0,r = N;while(l+1<r){int mid = l+r >> 1;if(check(mid)) r = mid;else l = mid ;}cout << r ; return 0;
}

解题思路

原来的一排石头可以抽象成一组数列 H。
由于小青蛙每次最多跳y个石头,所以每个长度为y连续子序列至少会被经过一次
那么 2x次路程,每个长度为y连续子序列至少会被经过2x次。所以,小青蛙能完成路程的必要条件是数列 ;中,每个长度为y连续子序列的和至少为 2x。



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

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

相关文章

bioRxiv|L2G:一张GPU卡也能训的基因组学语言模型

预训练语言模型(如BERT、GPT等)在自然语言处理(Natural Language Processing, NLP)领域取得了显著进展,其在多种语言任务中的表现令人瞩目。这一成功激发了基因组学领域的研究者们尝试开发类似的基础模型(Foundation Models, FMs),以解决复杂的基因组学任务。然而,构建…

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(…