明天我就要考蓝桥杯省赛了,本蒟蒻已瑟瑟发抖,所以现在写一篇文章。

题目分别为:

1.​​​​​​B4270 [蓝桥杯青少年组省赛 2023] 特殊运算符

2.B4271 [蓝桥杯青少年组省赛 2023] 四叶玫瑰数

3.B4272 [蓝桥杯青少年组省赛 2023] 质因数的个数

4.B4273 [蓝桥杯青少年组省赛 2023] 最大的矩形纸片

……(本人只讲解前四道题,后两道是蓝题,不会做了)

题解开始:

第一题:

题目描述

假定有一个运算符 >>>,它的功能如下所示:

>>> 257=25>>> 182=18>>> 933=93

给定一个正整数 N(100<N<1000),请计算 N−(>>> N) 的结果。

例如:N=257 时,257−(>>> 257)=257−25=232。

输入格式

输入一个正整数 N(100<N<1000)。

输出格式

输出一个整数,表示 N−(>>> N) 的结果

输入输出样例

输入 #1复制

257

输出 #1复制

232

这道题十分简单,这里不多说,直接上AC代码:

#include<bits/stdc++.h>
using namespace std;
int n;
int main(){cin>>n;cout<<n-(n/100*10+n/10%10);return 0;
}

时间复杂度:O(1)

第二题:

题目描述

四叶玫瑰数是指一个四位数,其各位上的数字的四次方之和等于本身。

给定两个正整数 N 和 M ,请将 N∼M(1≤N≤M≤1000000) 之间(含 N 和 M)的四叶玫瑰数按从小到大的顺序输出。

例如:N=1234,M=2345 时,有一个四叶玫瑰数 1634,因为 14+64+34+44=1634,故输出 1634。

输入格式

第一行输入两个正整数 N,M(1≤N≤M≤1000000)。

输出格式

输出一行,包含若干个用一个空格隔开的正整数,表示 N∼M 之间的四叶玫瑰数按从小到大的顺序的输出结果。

题目数据保证给定的 N∼M 范围内至少有一个四叶玫瑰数

输入输出样例

输入 #1复制

1234 2345

输出 #1复制

1634

这道题照样简单,先写一个for循环,从N开始到M结束。每一次for循环,都求出各个数位的4次方之和,最后判断一下是否等于i就行了。上AC代码:

#include<bits/stdc++.h>
using namespace std;
int n,m;
int main(){cin>>n>>m;int sum=0;for(int i=n;i<=m;i++){if(i<=999||i>9999) continue;int t=i;sum=pow(i/1000,4)+pow(i/100%10,4)+pow(i/10%10,4)+pow(i%10,4);if(sum==t) cout<<sum<<' ';}return 0;
}

时间复杂度:O(m-n)

第三题:

题目背景

  • 因数:又称为约数,如果整数 a 除以整数 b(b=0) 的商正好是整数而没有余数,我们就说 b 是 a 的因数。
  • 质数:又称为素数,一个大于 1 的自然数,除了 1 和它自身外,不能被其他自然数整除的数叫做质数。2 是最小的质数。
  • 质因数:如果一个数 a 的因数 b 同时也是质数,那么 b 就是 a 的一个质因数,例如:8=2×2×2,2 就是 8 的质因数;12=2×2×3,2 和 3 就是 12 的质因数。

题目描述

给定两个正整数 N 和 M(1≤N≤M≤107),统计 N 到 M 之间(含 N 和 M)每个数所包含的质因数的个数,输出其中最大的个数。

例如: 当 N=6,M=10,6 到 10 之间:

  • 6 的质因数是 2,3,共有 2 个;
  • 7 的质因数是 7,共有 1 个;
  • 8 的质因数是 2,2,2,共有 3 个;
  • 9 的质因数是 3,3,共有 2 个;
  • 10 的质因数是 2,5,共有 2 个;

6 到 10 之间的数中质因数最多的是 8,质因数有 3 个,故输出 3。

输入格式

输入两个正整数 N 和 M(1≤N≤M≤107),两个正整数之间用一个空格隔开。

输出格式

输出一个整数,表示质因数个数中的最大值。

输入输出样例

输入 #1复制

6 10

输出 #1复制

3

这道题有两种做法:

第一种:暴力

代码:

#include<bits/stdc++.h>
using namespace std;
vector<int> gp(int x){vector<bool> p(x+1,true);p[0]=p[1]=false;for(int i=2;i<=sqrt(x);i++){if(p[i]){for(int j=i*i;j<=x;j+=i){p[j]=false;}}}vector<int> pp;for(int i=2;i<=x;i++){if(p[i]){pp.push_back(i);}}return pp;
}
int zys(int num,const vector<int>& pp){int cnt=0;for(int p:pp){if(p*p>num) break;if(num%p==0){while(num%p==0){num/=p;cnt++;}}}if(num>1){cnt++;}return cnt;
}
int main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int n,m;cin>>n>>m;vector<int> ppp=gp(m);int maxx=0;for(int i=n;i<=m;i++){int c=zys(i,ppp);if(c>maxx){maxx=c;}}cout<<maxx;return 0;
}

但是只得90分,要想进入国赛,这道题必须拿下(除非你会做后面3题)。所以:

第二种做法:DP优化

代码:

#include<bits/stdc++.h>
using namespace std;
int n,m,dp[10000005],ans=0;
bool vis[10000005];
int main(void){cin>>n>>m;for(int i=2;i<=m;i++){if(vis[i]) continue;dp[i]=1;for(int j=2;j<=m/i;j++){vis[i*j]=true;dp[i*j]=dp[j]+1;}}for(int i=n;i<=m;i++){ans=max(ans,dp[i]);}cout<<ans;return 0;
}

时间复杂度:O(m log m)

第四题:

题目描述

一张半边参差不齐的网格纸(网格边长均为 1),有一边是完整没有破损的。现要从中剪出一片面积最大的矩形纸片。

给定网格纸中完整边的长度 N(1≤N≤1000000),以及网格中每一列残存部分的高度(1≤ 高度 ≤10000),输出能够剪出的最大矩形纸片面积。

输入格式

第一行输入一个正整数 N(1≤N≤1000000),表示纸片完整边的长度。

第二行输入 N 个正整数(1≤ 正整数 ≤10000),表示每列格子残存部分的高度,两个正整数之间用一个空格隔开。

输出格式

输出一个正整数,表示能够剪出的最大矩形纸片面积。

输入输出样例

输入 #1复制

6
3 2 1 4 5 2

输出 #1复制

8

先读题,给定 n 个宽为 1 的矩形,每个矩形的高各不相同。将它们拼在一起,要求在从中剪出一块最大的矩形纸片。
我们很自然可以想到枚举左右起始位置,在枚举中间的位置来计算当前区间内的最大矩形长度,再来更新答案。

#include<bits/stdc++.h>
using namespace std;
int h[1000001];
int main(){int n;cin>>n;for(int i=1;i<=n;i++){cin>>h[i];}int maxn=0;for(int i=1;i<=n;i++){int m=1e9+1;for(int j=i;j<=n;j++){for(int k=i;k<=j;k++){m=min(m,h[k]);} maxn=max(maxn,m*(j-i+1));}}cout<<maxn<<endl;return 0;
}

结果……30 分
我们可以发现该解法的时间复杂度为 O(n3)。 所以我们得换一种方法来写。 我们可以先假设矩形长度递增,那么我们该如何做?
很显然,我们可以尝试将当前的矩形的高度作为最后矩形的高度,并将该矩形的宽一直延伸到右边界,再算出矩形的面积用来更新答案。
所以我们看回这道题,我们可以利用上面的结论,如果下一个矩形的高度比上一个小,那么该矩形想与前面的矩形拼成一个更大的矩形,那么之前的矩形高于当前矩形的面积就没有任何用处了(如下图中打叉的部分)。

所以我们就可以用到一种算法来解决这种问题————单调栈
我们只需要建立一个栈,用来维护一个高度始终单调的序列,这样我们就可以解决这个问题了。
我们先从左到右依次扫描每个矩形,如果当前的矩形高度高于栈顶矩形,就让其进栈;否则就不断取出栈顶,直至栈为空或栈顶矩形的高度比当前矩形小。出栈过程中我们累加弹出矩形的宽度,并且在每次弹出时,就用其高度乘以累加的宽度去更新答案。出栈结束后,我们再把一个高度为当前矩形高度、宽度为累加值的矩形入栈。注意,结束后,要将栈中剩下的矩形依次弹出,采用上面相同的方法来更新答案。所以我们可以增加一个高度为 0 的矩形,避免再扫描结束后有剩余矩形。

AC代码1——数组模拟:

#include<bits/stdc++.h>
using namespace std;
#define int long long
int a[1000001];
int s[1000001];
int w[1000001];
int n;
signed main(){int p=0,ans=0;cin>>n;for(int i=1;i<=n;i++) cin>>a[i]; a[n+1]=0; for(int i=1;i<=n+1;i++){if(a[i]>s[p]){s[++p]=a[i];w[p]=1;}else{int width=0;while(s[p]>a[i]){width+=w[p];ans=max(ans,(long long)width*s[p]);p--;}s[++p]=a[i];w[p]=width+1;}}cout<<ans<<endl;return 0;
}

AC代码2——STL:

#include<bits/stdc++.h>
using namespace std;
struct node{int h,w;
};
stack<node>s;
long long a[1000001];
long long ans=0;
int main(){int n;cin>>n;for(int i=1;i<=n;i++) cin>>a[i];a[n+1]=0;for(int i=1;i<=n+1;i++){long long width=0;while(!s.empty() && a[i]<s.top().h){//单调递增width=width+s.top().w;ans=max(ans,width*s.top().h);s.pop();}s.push( (node){a[i],width+1} );}cout<<ans<<endl;return 0;
}

好了宝子们,今天的题解就到这里,我们明天再会!

制作不易,点个关注再走叭!

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

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

相关文章

HTML全景效果实现

我将为您创建一个精美的360度全景效果页面&#xff0c;使用Three.js库实现沉浸式全景体验&#xff0c;并提供用户友好的控制界面&#xff0c;完整代码看文章末尾。 设计思路 使用Three.js创建全景球体 添加控制面板用于切换不同场景 实现自动旋转和手动控制选项 添加加载状…

Python 属性描述符(描述符用法建议)

描述符用法建议 下面根据刚刚论述的描述符特征给出一些实用的结论。 使用特性以保持简单 内置的 property 类创建的其实是覆盖型描述符&#xff0c;__set__ 方法和 __get__ 方法都实现了&#xff0c;即便不定义设值方法也是如此。特性的 __set__ 方法默认抛出 AttributeError: …

Milvus 向量数据库内存使用相关了解

1、支持 MMap 的数据存储在 Milvus 中&#xff0c;内存映射文件允许将文件内容直接映射到内存中。这一功能提高了内存效率&#xff0c;尤其是在可用内存稀缺但完全加载数据不可行的情况下。这种优化机制可以增加数据容量&#xff0c;同时在一定限度内确保性能&#xff1b;但当数…

C++编程之旅-- -- --默认成员函数(全详解)

目录前言构造函数构造函数形式&#xff1a;构造函数的特性&#xff1a;explicit关键字析构函数析构函数的概念析构函数的特性含有类类型的成员变量的类析构函数的调用拷贝构造函数拷贝构造函数的概念拷贝构造函数的特性浅拷贝和深拷贝&#xff1a;拷贝构造函数典型调用场景&…

Linux网络编程:TCP的远程多线程命令执行

目录 前言&#xff1a; 一、前文补充 二、服务端的修改 三、Command类的新增 前言&#xff1a; 好久不见&#xff0c;最近忙于其他事情&#xff0c;就耽误了咱们的Linux的网络部分的学习。 今天咱们先来给之前所学的TCP的部分进行一个首尾工作&#xff0c;主要是给大家介绍…

重学React(三):状态管理

背景&#xff1a; 继续跟着官网的流程往后学&#xff0c;之前已经整理了描述UI以及添加交互两个模块&#xff0c;总体来说还是收获不小的&#xff0c;至少我一个表面上用了四五年React的前端小卡拉米对React的使用都有了新的认知。接下来就到了状态管理&#xff08;React特地加…

java web项目入门了解

目录一、项目流程1. 使用servle2. 使用框架二、了解java web项目构造1. 项目目录结构2. 查看页面访问顺序3. 发起请求&#xff1a;jqueryajax4. 接受参数5. JSONJSON 数组三、get和post请求区别一、项目流程 1. 使用servle 有客户端和服务端&#xff0c;客户端和服务端进行交…

网络资源模板--基于Android Studio 实现的日记本App

目录 一、测试环境说明 二、项目简介 三、项目演示 四、部设计详情&#xff08;部分) 创建修改页面 五、项目源码 一、测试环境说明 电脑环境 Windows 11 编写语言 JAVA 开发软件 Android Studio (2020) 开发软件只要大于等于测试版本即可(近几年官网直接下载也可…

GO的启动流程(GMP模型/内存)

目录第一部分&#xff1a;程序编译第二部分&#xff1a;函数解读1&#xff09;Golang 核心初始化过程2&#xff09;创建第一个协程3&#xff09;启动系统调度4&#xff09;跳转main函数5&#xff09;总结第三部分&#xff1a;GMP模型Goroutine流程解读第四部分&#xff1a;内存…

OLTP与OLAP:实时处理与深度分析的较量

OLTP&#xff08;Online Transaction Processing&#xff09;定义&#xff1a;OLTP 系统主要用于管理事务性应用程序的数据。这类系统需要支持大量的短时、快速的交互式事务&#xff0c;比如银行交易、在线购物订单等。特点&#xff1a;实时处理&#xff1a;OLTP 系统要求对数据…

数据安全与隐私保护:企业级防护策略与技术实现

引言&#xff1a;数据安全的新时代挑战在数字化转型加速的今天&#xff0c;数据已成为企业最核心的资产。然而&#xff0c;数据泄露事件频发&#xff0c;据 IBM《2024 年数据泄露成本报告》显示&#xff0c;全球数据泄露平均成本已达445 万美元&#xff0c;较 2020 年增长了 15…

AI_RAG

一.为什么需要RAG&#xff08;AI幻觉&#xff09;大模型LLM在某些情况下给出的回答很可能错误的&#xff0c;涉及虚构甚至是故意欺骗的信息。二.什么是RAGRAG是一种结合“信息检索”和“文本生成”的技术&#xff0c;旨在提升生成式AI模型的准确性和可靠性。它通过以下两个核心…

LeetCode111~130题解

LeetCode111.二叉树的最小深度&#xff1a; 题目描述&#xff1a; 给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明&#xff1a;叶子节点是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a;root …

n8n飞书webhook配置(飞书机器人、飞书bot、feishu bot)Crypto节点、js timestamp代码、Crypto node

自定义机器人使用指南 利用 n8n 打造飞书 RSS 推送机器人 文章目录自定义机器人使用指南注意事项功能介绍在群组中添加自定义机器人操作步骤邀请自定义机器人进群。- 进入目标群组&#xff0c;在群组右上角点击更多按钮&#xff0c;并点击 设置。- 在右侧 设置 界面&#xff0…

nhdeep档案管理工具软件官网

欢迎访问nhdeep官网&#xff1a; www.nhdeep.com NHDEEP提供一系列专业的单机版档案管理工具&#xff0c;满足不同场景下的档案管理需求&#xff0c;无需网络连接&#xff0c;数据安全可靠。所有工具均提供免费试用版下载。 档案综合管理系统单机版:全面的档案管理解决方案&a…

RocketMQ节点部署计算方案

节点计算公式 业务场景 预期峰值TPS&#xff1a;200,000 单组容量&#xff1a;40K TPS 容灾要求&#xff1a;同城双机房 nameServer节点数max(3, (15/50) 1) max(3, 0.3 1) max(3, 1.3) 3 Broker节点数ceil(200,000 / 40,000) 5组 总节点数 NameServer节点Broker组数(Mas…

MyBatis联合查询 - XML篇

文章目录数据库设计MyBatis 配置MyBatis 映射文件Mapper 接口总结数据库设计 建表 SQL CREATE TABLE user (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL );CREATE TABLE order (id INT PRIMARY KEY AUTO_INCREMENT,user_id INT NOT NULL,order_no VARCHAR(…

Kubelet 探针如何选择 IP:status.PodIP 溯源与“同 Pod 两个 IP“现象解析

背景与现象同一个 Pod 的 readiness 和 liveness 探针日志显示连接的 IP 不一致&#xff08;例如 10.10.6.10:9999 与 10.10.6.32:9999&#xff09;。本文从 kubelet 源码入手&#xff0c;解释探针目标 IP 的来源、为何会出现两个不同 IP&#xff0c;并给出建议与验证方法。在如…

Arm Development Studio 安全通告:CVE-2025-7427

安全之安全(security)博客目录导读 目录 一、概述 二、CVE 详情 三、受影响产品 四、建议 五、致谢 六、版本历史 一、概述 ARM已知悉一个影响 Arm Development Studio 的安全漏洞&#xff0c;该漏洞可能允许攻击者执行 DLL 劫持攻击&#xff08;DLL hijacking attack&…

C#异步编程双利器:异步Lambda与BackgroundWorker实战解析

**摘要&#xff1a;**深入剖析两种异步编程范式&#xff0c;解决GUI线程阻塞难题 一、异步Lambda表达式&#xff1a;事件处理的轻量化利器 核心价值&#xff1a;简化事件响应中的异步操作&#xff0c;避免UI线程阻塞 ✅ 典型应用场景&#xff08;WPF示例&#xff09;&#xff1…