第三轮easy~hard题目

news/2025/2/7 14:34:33/文章来源:https://www.cnblogs.com/tolskar/p/18702518

题目1

代码

#include<iostream>
#include<queue>
#include<string>
using namespace std;
int main()
{priority_queue<int> s;string str;int a;str="0";while(str!="end"){cin>>str;if(str=="insert"){cin>>a;s.push(a);}else if(str=="extract"){cout<<s.top()<<endl;s.pop();}}}

解题思路

1.创建一个优先队列s,用于存储整数。
2.使用一个字符串str作为输入的控制变量,当str不等于"end"时,程序继续执行。
3.如果str等于"insert",则从输入中读取一个整数a,并将其插入到优先队列s中。
4.如果str等于"extract",则输出优先队列s的顶部元素(即最大元素),并将该元素从队列中移除。



题目2

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn=2e6+5;
const int maxm=22; //∵log(2e6)<22
int a[maxn];
int f[maxn][maxm]; //f[i][j]表示从i位起的2^j个数中的最大数int main() {int n,m,x,y;scanf("%d%d",&n,&m);for(int i=1; i<=n; i++) {scanf("%d",&a[i]); //数组a的下标从1开始f[i][0]=a[i]; //f[i][0]表示[i,i]中的最大值,只能是a[i],故f[i][0]=a[i]}for(int j=1; j<=log2(n); j++)for(int i=1; i+(1<<j)-1<=n; i++) //注意i的右端点为i+(1<<j)-1,不能越界f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]); //预处理for(int i=1; i<=m; i++) { //查询scanf("%d%d",&x,&y);int k=log2(y-x+1);printf("%d\n",max(f[x][k],f[y-(1<<k)+1][k]));}return 0;
}

解题思路

创建一个set容器s,用于存储整数。
使用一个字符串str作为输入的控制变量,当str不等于"end"时,程序继续执行。
如果str等于"insert",则从输入中读取一个整数a,并将其插入到集合s中。由于set会自动排序,所以插入后集合仍然是有序的。
如果str等于"extract",则输出集合s的第一个元素(即最小元素),并将该元素从集合中移除。



题目3

代码

#include <bits/stdc++.h>
using namespace std;
int main() 
{priority_queue<int,vector<int>,greater<int> > pque;int n,i,x,a,b,sum=0;cin>>n;for(i=0; i<n; i++){cin>>x;pque.push(x);}if(pque.size()==1){sum=pque.top();}while(pque.size()>1){a=pque.top();pque.pop();b=pque.top();pque.pop();x=a+b;pque.push(x);sum+=x;}cout<<sum<<endl;return 0;
}

解题思路

创建一个优先队列pq,用于存储整数。
使用一个字符串str作为输入的控制变量,当str不等于"end"时,程序继续执行。
如果str等于"insert",则从输入中读取一个整数a,并将其插入到优先队列pq中。
如果str等于"extract",则输出优先队列pq的顶部元素(即最大元素),并将该元素从队列中移除。



题目4

代码

#include<iostream>
using namespace std;
int a[100]={0};
int main()
{int m,n,i=1,sum=0,k=0;//sum是出局人数cin>>n>>m;while(n!=sum)//当出局人数!=n 进入{if(i>n)//当i>n的时候从1重新报数i=1;if(a[i]==0)//只有当元素值为0进入 否则直接++{k++;//k计数器++if(k==m){sum++;k=0;//k从0开始报数a[i]=1;//元素值变1 表示出局 往后不再报数cout<<i<<" ";}}i++;}return 0;
}

解题思路

初始化一个整数数组a,用于标记每个战士是否已经出局,初始状态下所有战士都未出局。
读取输入的战士数量n和报数上限m。
使用一个变量i从1开始循环,模拟报数过程。
如果当前战士未出局(即a[i]为0),则计数器k加1。
如果计数器k达到报数上限m,则该战士出局(将a[i]设置为1),计数器k重置为0,并输出该战士的编号。
循环结束条件为出局人数sum等于战士总数n。



题目5

代码

#include <cstdio>
#include <iostream>
using namespace std;
int n,h[100001],b[100001],stack[100001],top=1;
int main()
{scanf("%d",&n);for (int i=1;i<=n;i++)scanf("%d",&h[i]);stack[1]=1;for (int i=2;i<=n;i++){while (h[i]>h[stack[top]] && top>=1) {b[stack[top]]=i;top--;}top++;stack[top]=i;}while (top>=1)b[stack[top--]]=0;for (int i=1;i<=n;i++)printf("%d\n",b[i]);return 0;
}

解题思路

读取输入的整数数量n。
初始化一个整数数组h,用于存储输入的整数。
初始化一个整数数组b,用于存储每个元素的下一个更大元素。
初始化一个栈stack,用于辅助构建单调栈。
将第一个元素的索引1入栈。
从第二个元素开始遍历数组h:
如果当前元素大于栈顶元素对应的数组值,则栈顶元素出栈,并更新出栈元素的下一个更大元素为当前 元素。
重复上述步骤,直到栈为空或者栈顶元素对应的数组值大于当前元素。
将当前元素的索引入栈。
遍历结束后,栈中可能还剩下一些元素,这些元素没有下一个更大元素,将它们的下一个更大元素设置为0。
输出数组b中的每个元素。



题目6

代码

#include<bits/stdc++.h>
using namespace std;int n, m;
int n2;
int go[400005][20];
int res[400005];struct person{   int id;//id:战士的编号int left, right;//战士的左右区间//按左边排序 bool operator < (const person b) const{return left < b.left;}
}w[400005];void fun1() { int next = 1;for(int i = 1;i <= n2; i++) { //每个区间的下一个是右端点最大的那个区间while(next <= n2 && w[next].left <= w[i].right) {next++;}go[i][0] = next - 1; //区间i的下一个最优区间}//倍增for(int i = 1; (1 << i) <= n; i++) {//1 << i即将1转换为二进制数后,左移i位for(int s = 1; s <= n2; s++) {go[s][i] = go[go[s][i - 1]][i - 1];//go[s][i]表示从第s个区间出发,走2^i个最优区间后到达的区间 }      }    
}void fun2(int x) { int len = w[x].left + m;//从第x个战士出发,移动一圈 int cur = x, ans = 1;for(int i = log2(n); i >= 0; i--) { int pos = go[cur][i];if(pos && w[pos].right < len) {ans += 1 << i; //累加跳过的区cur = pos; }}res[w[x].id] = ans + 1;
}int main()
{cin >> n >> m;for(int i = 1; i <= n; i++) {w[i].id = i; cin >> w[i].left >> w[i].right;if(w[i].right < w[i].left) w[i].right += m;}sort(w+1, w+n+1); n2 = n;//n2就是复制后再相接 for(int i = 1; i <= n; i++) { n2++; w[n2].id = w[i].id; w[n2].left = w[i].left + m;w[n2].right = w[i].right + m;}fun1();for(int i = 1;i <= n; i++) {fun2(i); }for(int i = 1; i <= n; i++) {cout << res[i] << " ";}return 0;
}

解题思路

读取输入的战士数量n和移动距离m。
初始化一个结构体数组w,用于存储每个战士的信息,包括编号、左端点和右端点。
对结构体数组w按照左端点进行排序。
复制结构体数组w,并将复制后的数组接在原数组后面,形成一个长度为2n的新数组,用于处理循环的情况。
初始化一个二维数组go,用于存储每个区间的下一个最优区间。
初始化一个数组res,用于存储每个战士的最终答案。
调用fun1函数,预处理出每个区间的下一个最优区间。
遍历每个战士,调用fun2函数,计算每个战士能够移动到的最远距离。
输出数组res中的每个元素,即每个战士的最终答案。



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

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

相关文章

通过Ollama本地部署DeepSeek R1以及简单使用

本文介绍了在Windows环境下,通过Ollama来本地部署DeepSeek R1。该问包含了Ollama的下载、安装、安装目录迁移、大模型存储位置修改、下载DeepSeek以及通过Web UI来对话等相关内容。1、下载Ollama 首先我们到Ollama官网去下载安装包,此处我们下载的是Windows版本的安装包,如下…

git删除gitee上传大文件转载

前言:在提交推送本地更改至仓库时,误将大文件给提交了,导致push时报错文件过大,因此需要将已经commit的大文件移除后再push 若已知要删除的文件或文件夹路径,则可以从第4步开始 1.对仓库进行gc操作 $ git gc 2.查询大文件 git verify-pack -v .git/objects/pack/pack-*.id…

Axure RP 9.0 软件安装、汉化

‌Axure RP9是一款专业的原型设计工具,主要用于快速创建交互式的高保真原型,帮助设计师和产品经理进行用户体验设计和界面设计‌。‌ 主要功能和应用场景‌原型设计‌:Axure RP9提供了丰富的交互组件和功能,如可交互的按钮、链接、表单元素等,用户可以模拟真实的应用程序或…

第八节 BERT实战

做下游分类任务,如何处理一句话的输入input_dis:输入哪些字 21128个汉字里编码 mask:输入的话有多长. 模型输入固定,不够的话用padding补上 Seq_ids:句子编码 segmentBERT输入token embedding 字编码(21128, 768) segment embedding 句子编码(2, 768) position embedding不用给…

linux X64函数参数传递过程研究

linux X64函数参数传递过程研究 - ZhaoKevin - 博客园 基础知识 函数传参存在两种方式,一种是通过栈,一种是通过寄存器。对于x64体系结构,如果函数参数不大于6个时,使用寄存器传参,对于函数参数大于6个的函数,前六个参数使用寄存器传递,后面的使用栈传递。参数传递的规律…

使用systemback封装Ubuntu系统iso镜像

25年小橘祝亲们钱财发发发,好运来来来。小橘初八就已经开工了,不知道家人们是不是也像小橘一样苦哈哈。今天给亲们分享使用systemback封装Ubuntu系统iso镜像。 一、环境部署 1.安装systembackecho "deb [arch=amd64] http://mirrors.bwbot.org/ stable main" > …

免费+数据安全!手把手教你在PC跑DeepSeek-R1大模型,小白也能秒变AI大神!

0 为啥本地部署? 在本地运行 AI 模型具有以下优势:隐私:你的数据保留在你的机器上 — — 不存在共享敏感信息的风险 成本: DeepSeek R1 可免费使用,无需订阅费或使用费 控制:无需外部依赖即可进行微调和实验1 使用Ollama 1.1 下载并运行应用程序 直达官网:1.2 选择你的平…

mkv和ass字幕文件合并

主要使用两种工具:ffmpeg和mkvmerge 操作系统:windows10及以上 ffmpeg下载:https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-win64-gpl-shared.zip mkvmerge下载:https://mkvtoolnix.download/windows/releases/89.0/mkvtoolnix-64-…

【日记】我已经穿越了那层屏障(1903 字)

正文每次节后都知道,能说 “节后再说” 这句话当时有多爽(笑。现在节后有好多好多事情要做——年后再说的事,袭来!昨天是收假之后第一天,开了个会,我没去。结果他们下来都一幅晴天霹雳的样子,我十分诧异。结果一问,基本上全部的人都要轮岗了。我三月份又要跑去业务线,…

洛谷题单指南-线段树的进阶用法-P5445 [APIO2019] 路灯

原题链接:https://www.luogu.com.cn/problem/P5445 题意解读:给定一个长度为n的01串,一共有q个时刻,对于每个时刻,可能有两种操作:1. 把第x个位置取反 2. 查询a ~ b - 1之间的串在过去有多少个时刻都为1。 解题思路: 一、朴素想法 每个时刻对路灯的状态建立线段树,可以…

[LLM] ZeRO-DP技术简析

[LLM] ZeRO-DP技术简析 本文对ZeRO: Memory Optimizations Toward Training Trillion Parameter Models中提出的ZeRO-DP进行简要总结。相关的讲解其实网上也有很多了,不过只看网上的终究还是有点走马观花,所以我还是决定自己写一篇博客,记录一下我自己的理解。这篇博客讲的不…

人工智能训练线上算力实验环境

语音识别,转文字。from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasksinference_pipeline = pipeline(task=Tasks.auto_speech_recognition,model=iic/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch,mo…