本文以洛谷平台所提供的题目描述及评测数据为基础进行讲解。


前言:这是本人的蓝桥杯试卷,大概排省一前40%的位置,实际上这届题目偏难,我没有做出太多的有效得分。我把当时的思路和现在学习的思路都复盘进来,希望给大家做个参考。

T1(5分)

题面描述

解析

根据题意,我们很快可以画出左边这张图,这是一条可行的路径。显然是半径r+弧长l

现在这个题面说“交替,不限次数”的使用两种操作,那么这样一下来可能把很多人又给吓迷糊了。但是如果我们画画图,按照右边的图去分析,我们会发现:不论怎么走,路径长度是一样的!这其实就有点考平面几何的意思,你把水平路径平移到x轴,圆弧路径往右平移,这本质仍然是r+l。

第一个理论性的难题就过了。剩下的问题是,怎么求半径和弧长?
半径显然用勾股定理,弧长我们要知道 l=r*θ,需要求这个角度。
考试的时候我发<cmath>没有arctan这个函数,所以没办法,我自己手搓了一个二分法求arctan的值。回来我才知道求角度的函数是atan。遇事不决的时候,构造二分解方程是个不错的选择。

但是主播还是出错了,原因在于:我把x和y看反了!我求的是半径加蓝色的弧长。。。怒亏五分

Code

#include <bits/stdc++.h>
#include <cmath>
#define eps 1e-6 
using namespace std;
double x=233.0,y=666.0;
double l,r,sita;
double arctan(double y,double x); 
int main() {r=sqrt(x*x+y*y);sita=arctan(y,x);//cout<<r<<' '<<sita<<endl;l=r*sita;cout<<(long long)(l+r)<<endl;return 0; 
}
double arctan(double y,double x){double t1=0,t2=3.15/2,mid=(t1+t2)/2;while(fabs(t1-t2)>=eps){if(tan(mid)-y/x>eps){t2=mid;}else if(tan(mid)-y/x<-eps){t1=mid;}else{break;}mid=(t1+t2)/2;		//cout<<t1<<' '<<t2<<' '<<tan(mid)<<' '<<y/x<<endl;}return mid;
}

T2(5分)

这题主播也是没想明白,所以照搬(翻译)的这个讲解:

【蓝桥杯】第十六届C++B组省赛真题详解_哔哩哔哩_bilibili

题面描述

解析

第一个条件就是说结果这是一个排序

第二个看起来很炸裂很复杂,但是实际上我们只要抓住两条信息:

1.i可以等于j,那么先令i=j试试会怎么样。测试代码在第一段。

可以发现(不过确实很难往这方面想),1到1013的排列可以是乱的(A1012<=1013,A1013<=1013),从1014开始,Ai必须等于i本身。

2.既然i>=1014时,Ai等于i,那么令i<=1013,j>=1014,可以得到Ai*j<=i*j+2025,这个对于任意的j都成立。

对于任意的j都成立,而2025/1014和2025/2025向下取整都是1,那么Ai<=i+1。

也就是说,A1=1 2,A2=1 2 3,A3 = 1 2 3 4......但是数不能重复选择。特殊的,A1013最高取1013,不能取1014,因为1014已经被A1014选走了。

所以实际上这是个选择的问题,从A1开始选才不会乱,一直是C_2^1乘下去,到最后是2^1012(而不是2^1013,因为上面解释了,第1013个数实际上没得选)

Code

#include <iostream>
#include <cmath>
using namespace std;
long long n=2025;
int main() {for(int i=1;i<=n;++i){cout<<i<<' '<<(int)sqrt(i*i+2025)<<endl;}return 0;
}
#include <iostream>
#define M 1000000007
using namespace std;
long long n=1012,res=1;
int main() {for(int i=1;i<=1012;++i){res=res*2%M;}cout<<res<<endl;return 0;
}

T3(10分)

题面描述

解析

这题我喜提0分,我在考试的时候是分奇偶讨论的,好像是奇数还是偶数我推出来了全成立,剩下的有条件。

但是,这题比我想象的还更暴力无解:既然序列中的数字是连续递增的整数,还可包括负数,那么我们构造的序列把前面和后面抵消掉,只剩下这个数字本身,就可以了,抵消的办法就是把负数拉过来。比如3,我们构造-2 -1 0 1 2 3,-2到2抵消掉,只剩下3本身。

所以,对于大于1的数都成立,只有1不成立。

Code

注意,<bits/stdc++.h>不能用count,这本身是一个函数。

#include <iostream>
using namespace std;
long long n,x,count=0;
int main() {cin>>n;for(int i=1;i<=n;i++){cin>>x;if(x!=1)++count;}cout<<count;return 0;
}

T4(10分)

题面描述

解析

这其实就是一道很纯粹的模拟题。
如果你做的是a=(b+c)/2;b=(a+c)/2;c=(a+b)/2;那么回家吧孩子,回家吧。值覆盖都没搞懂啊这是。

但是没完,注意到k<=10^9,说明你的时间很可能会超。那就需要一个优化,手动推导就可以发现,a=b=c的时候直接break掉,可以省很多时间。

但是洛谷的数据莫名其妙有点抽风,,,见下,错掉的全部是RE错误。我把if(a==b&&b==c)改成if(a==b&&b==c&&a==c)就过了。

Code

#include <iostream>
using namespace std;
long long T=0,k=0,a=0,b=0,c=0;
int main() {cin>>T;for(int i=1;i<=T;++i){cin>>a>>b>>c>>k;while(k!=0){if(a==b&&b==c&&a==c)break;long long ta=0,tb=0,tc=0;ta=(b+c)/2;tb=(a+c)/2;tc=(a+b)/2;a=ta;b=tb;c=tc;--k;}cout<<a<<' '<<b<<' '<<c<<endl;}return 0;
}

T5(15分)

题面描述

解析

这题开始上难度了,但是想要分析出来也并不难。

使得L达到最小值,那么有一个基本的出发点就是贪心。因为所有数字都是正的,那么后面的大于前面的,形成一个单调序列,才能够让L取最小。所以先把数组设为a,进行sort排序。

然后我们来计算每个a[i]^2-a[i-1]^2的值。构成一个数组b[i]。那么这题转化为求b数组里面一个长度为m-1的子序列,使得和达到最小值。为什么是m-1,因为你选M个数,b数组只能得出m-1个值。那么显然有暴力做法骗分。

但是,都分析到这一步子序列了,你就不能想着优化一下吗!这个就是典型的前缀和的问题,我们构造一个前缀和数组c[i],那么求c[i+m-1]-c[i]的min就可以了,时间复杂度哐哐降!

Code

#include <iostream>
#include <algorithm>
using namespace std;
long long n,m;
long long a[100005]={0},b[100005]={0},c[100005]={0};
int main() {cin>>n>>m;for(int i=1;i<=n;++i){cin>>a[i];}sort(a+1,a+n+1);for(int i=2;i<=n;++i){b[i]=a[i]*a[i]-a[i-1]*a[i-1];c[i]=c[i-1]+b[i];}long long ans=c[m]-c[1];for(int i=1;i<=n-m+1;++i){//cout<<i+m-1<<' '<<i<<' '<<c[i+m-1]<<' '<<c[i]<<endl; if(c[i+m-1]-c[i]<ans)ans=c[i+m-1]-c[i];}cout<<ans;return 0;
}
/*可以拿下面的做测试,输出应该为0。
6 2
1 2 3 4 4 5
*/

T6(15分)

略有遗憾的一题。

题面描述

解析

这是一篇非常有个人特色的题解。这是我省赛打的最后一道题,一开始用图的dfsbfs我发现不给力,直接进行数学推导可能还会好一些,所以这篇题解倾向于数学和模拟。当时没有完全正确,现在重新写了一遍,知道了问题所在。

首先基础的也是main函数里面的:把字符串翻译成图,用数组s去存储。
除了数组s,我还开了一组数组a,这个是用来寻找'#'开头和'#'结尾的。
我的基本思路是,要是碰见(1)..##..(2)..#.#.这样的,我们直接定位到第三列和第五列,只要在中间去讨论要不要补,而前面后面都是空白,那就没有讨论的必要。
所以我的bgn表示最开头的#,fnl表示最尾巴的#,中间用一个循环,从bgn到fnl,从左向右检测。

这个“检测”的具体操作如下:

我们知道,一列分为四种情况:
(1)# (2). (3)# (4).
(1)# (2). (3).  (4)#

我先进行"记忆化",定义一个lastpos,分别表示一些情况,你可以理解为方向:
lastpos=3,前面是(1),lastpos=2,前面是(4),lastpos=1,前面是(3),至于两个点,不定义。

1.如果这一列都是#,也就是都是检测器,那么ans就不用++了,"方向"改成3

2.如果这一列都是. ,也就是啥都没有,那么ans必须++,然后"方向"不需要改变(在这里引入lastpos,也是为了防止中间有很多的. ,因为如果只看前一列,你是判断不出前面的情况的)

3.如果这一列是情况(3),那么此时要讨论前面的"方向"是什么:
如果lastpos=3,那么ans不需要++,你的lastpos=1,因为这一列的状态不变。
如果lastpos=2,也就是上一个和这一个完全相反
也就是 . # 或者 . . . . #这种中间全是点的(中间的已经被判断出来并且ans++了,故等效于左边)
           # .          #. . . .
那么加一个检测器到右下角等效于这种情况:. #,现在你的lastpos就是3了,因为这列填满了。
                                                                       # #
如果lastpos=1,那前面的情况和现在的情况是一样的,那就不用动了,ans不用加,方向不用改。

4.如果这一列是情况(4),同理,你根据逻辑的对称性也能推理出来。

那么现在我来说说我错的点:lastpos=3和lastpos=2当时没有讨论清楚,我只有lastpos=1的讨论
我给一个测试点:

..#.#..
.#.#.#.

如果只有lastpos=1,那么我需要补充四个点(除了最后一列都得补充)。但是实际只要补充两个点。
因为我没意识到,补充了点之后,这一列状态就相当于lastpos=3了,也就是万能墙了。
第二个错的点就是,测试点全为...的时候要特判,不然我的逻辑答案是1(bgn=fnl,然后调到第二种情况ans++),洛谷会喜提19/20。

Code

#include<iostream>
#include<cmath>
using namespace std;
long long n;
string str1,str2;
char ch;
bool s[3][1000005]={0};
long long a[3][1000005]={0},topA=0,topB=0;
long long lastpos=0;
long long ans=0;
void fun();
int main()
{cin>>str1>>str2;n=str1.length();for(int i=1;i<=n;i++){ch=str1[i-1];if(ch=='#'){a[1][++topA]=i;s[1][i]=1;}}for(int i=1;i<=n;i++){ch=str2[i-1];if(ch=='#'){a[2][++topB]=i;s[2][i]=1;}}fun();cout<<ans;return 0;
}void fun()
{int bgn=min(a[1][1],a[2][1]),fnl=max(a[1][topA],a[2][topB]);//cout<<bgn<<' '<<fnl<<endl;if(topA==0&&topB==0) return;for(int i=bgn;i<=fnl;i++){if(s[1][i]==1&&s[2][i]==1){lastpos=3;}else if(s[1][i]==0&&s[2][i]==0){ans++;}else if(s[1][i]==1&&s[2][i]==0){if(lastpos==2){ans++;lastpos=3;}else{lastpos=1;}}else if(s[1][i]==0&&s[2][i]==1){if(lastpos==1){ans++;lastpos=3;}else{lastpos=2;}}}return ;
}

T7(20分)

题面描述

分析

我是对照着这篇来学习理解的

题解:P12136 [蓝桥杯 2025 省 B] 生产车间 - 洛谷专栏

差不多关于这题的精神思想理解到位了,但是这一段的代码实现我始终啃不下来,可能是背包题本身还不熟练吧。

这是我理解到的图。这题的意思就是列举每个点位所有的可能性。

T8(20分)

题面描述

解析

对于这题,我大概听到9分钟,就关掉视频了,悟道了。大家也可以试试看能听到多久你就明白了。

本题只有三种运算:加法、减法、异或,而异或等级最高。这个实际上是反逻辑的,计算机是先加减后异或。所以我在考试的时候搞了模拟,开一个数栈和一个符号栈去暴力,代码特别长3^13次方也约等于10^6,只能骗前30%的点(不过6分也很香)。

那么本题的正解是什么呢?不可能是死算,那么我们能不能从样例着手分析?

聪明的你从样例其实就应该能发现了!对于一个空格,可以填+也可以填-,总有一个对应的方式,让他们加起来和=0,只留下前面的数据。

所以,我们实际上留下来的是什么?

这个规律用我就不用文字表述啦(表达能力有限咳咳)

那么代码怎么实现方便呢?每次都进行异或运算,显然不合适。那么我们开一个数组a,a[i]=a[i-1]^输入的数,就不用每次都来计算了,就很方便!

然后由于pow可能过大,要考虑模,而且每次都计算模幂非常麻烦,所以我们自己写一个数组b存储模幂运算结果。

Code

#include<iostream>
#define M 1000000007
using namespace std;
long long n,x,res=0; 
long long a[100010]={0};
long long b[100010]={0}; 
void fun();
int main()
{cin>>n;for(int i=1;i<=n;i++){cin>>x;a[i]=a[i-1]^x;}b[0]=1;b[1]=3;for(int i=2;i<=n;i++){b[i]=(b[i-1]*3)%M;}for(int i=1;i<=n-1;i++){res=(res+a[i]*2*b[n-1-i])%M;}res=(res+a[n])%M;cout<<res<<endl;return 0;
}

综上,蓝桥杯不愧是数学杯。。。

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

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

相关文章

兰顿蚂蚁路径lua测试

兰顿蚂蚁local p0 local x,y,z0,7,0 local function add() local result,id Block:getBlockID(x,y,z)if id1 thenBlock:destroyBlock(x,y,z,false) pp90 elseBlock:setBlockAll(x,y,z,1,0) pp-90 end x,zx-math.floor(0.5math.sin(math.rad(p))),z-math.floor(0.5math.cos(m…

【Axure RP】什么是Axure?Axure可以用来做什么?

【Axure RP】什么是Axure&#xff1f;Axure可以用来做什么&#xff1f; 目录【Axure RP】什么是Axure&#xff1f;Axure可以用来做什么&#xff1f;Axure RP简介Axure RP 是什么&#xff1f;Axure RP核心功能和应用场景Axure RP简介 Axure RP 是什么&#xff1f; Axure RP 是一…

Java项目:基于SSM框架实现的畅玩北海旅游网站管理系统【ssm+B/S架构+源码+数据库+毕业论文】

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本畅玩北海旅游网站就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

NuxtJS中网络请求模块的封装与最佳实战

在网络开发中&#xff0c;封装一个简洁、高效的网络请求模块对于项目的可维护性和扩展性至关重要。本文将详细介绍如何在NuxtJS中封装一个通用的网络请求模块&#xff0c;并结合最佳实践来说明如何使用它来进行网络请求。良好的代码结构和封装&#xff0c;不但结构清晰还能够大…

云归子批量混剪软件批量剪辑软件批量分割视频更新记录

www.yunguizi.com 优化显卡硬件加速配置 ⚡ 优化 2025年07月07日 版本 v1.1.6 优化显卡硬件加速配置 修复了一些重要内容 &#x1f41b; 修复 2025年07月06日 版本 v1.1.6 修复了一些重要内容 重构读写机制 ⚡ 优化 2025年07月06日 版本 v1.1.6 优化了一些重要内容&#xff1b;…

SpringBoot校园外卖服务系统设计与实现源码

概述 基于SpringBoot开发的校园外卖服务系统&#xff0c;实现了从外卖管理到订单处理的全流程数字化解决方案&#xff0c;包含外卖管理、订单处理、用户管理等全方位功能。 主要内容 核心功能模块&#xff1a; ​​个人信息管理​​&#xff1a; 修改密码个人信息修改 ​​…

东软8位MCU低功耗调试总结

简介主控选用8位ES7P7021&#xff0c;应用于磁吸无线充电场景&#xff0c;有一个双向C口&#xff08;IP5219&#xff09;&#xff0c;MCU控制电量灯显示&#xff0c;通过IIC控制C口的降额&#xff0c;插入TYPE-C线之后有一个外部中断信号&#xff0c;触发MCU唤醒&#xff0c;开…

什么是 3D 文件?

3D 文件是 3D 对象的数字表示形式&#xff0c;可以在计算机辅助设计 &#xff08;CAD&#xff09; 软件中创建或编辑。它们包含有关物体的形状、大小和结构的信息&#xff0c;对 3D 打印过程至关重要。3D 文件格式允许在不同的程序和打印机之间交换 3D 模型&#xff0c;并确定模…

语言模型 RLHF 实践指南(一):策略网络、价值网络与 PPO 损失函数

在使用 Proximal Policy Optimization&#xff08;PPO&#xff09;对语言模型进行强化学习微调&#xff08;如 RLHF&#xff09;时&#xff0c;大家经常会问&#xff1a; 策略网络的动作概率是怎么来的&#xff1f;价值网络的得分是如何计算的&#xff1f;奖励从哪里来&#xf…

日常--记一次gitlab Runner配置与CI/CD环境搭建流程

文章目录一、前言二、相关知识1.相关定义1.什么是 CI&#xff1f;2.什么是 CD&#xff1f;2.CI/CD 构建块与工具链3.为什么要使用 CI/CD&#xff1f;三、准备四、实现1.Runner安装与配置1.更新源2.安装Runner3.注册Runner4.启动Runner5.查看Runner信息2.CI/CD流程测试1.CI/CD构…

东方仙盟AI数据中间件使用教程:开启数据交互与自动化应用新时代——仙盟创梦IDE

一、启动未来之窗AI 二、初始化数据接口三、便捷接口数据进入东方仙盟获取接口标准四、同步参数仙界界牌&#xff0c;冥界界牌&#xff0c;仙盟界牌 五、开始同步六、东方仙盟青云剑魂架构在当今数字化浪潮下&#xff0c;数据的采集、处理与传输成为众多应用场景的核心需求。而…

Rust 仿射类型(Affine Types)

在 Rust 中&#xff0c;仿射类型&#xff08;Affine Types&#xff09; 是所有权系统的理论基础&#xff0c;它规定了每个值有且仅有一次使用机会。这与线性类型&#xff08;必须恰好使用一次&#xff09;有所不同&#xff0c;允许值未被使用就被丢弃。Rust 中的仿射类型核心特…

python库 arrow 库的各种案例的使用详解(更人性化的日期时间处理)

文章目录 一、arrow概述1.1 arrow介绍1.2 安装 arrow1.3 注意事项二、基本使用2.1 创建 Arrow 对象2.2 格式化输出2.3 时间运算三、高级功能3.1 时区处理3.2 时间范围3.3 时间间隔四、实际应用案例4.1 日志时间处理4.2 会议时间提醒4.3 国际化时间显示5. Arrow 与 datetime 互操…

window 服务器上部署前端静态资源以及nginx 配置

最近搞了一台境外服务器 这种境外服务器是不可以配置域名的 但是可以使用ip访问 但是如果需要 配置 需要下载nginx nginx: download 我这个是windows 的 服务器 所以下载windows 的nginx 下载完成以后 这个里面的html 文件 就是前端项目 里面必须要有index.html文件 部署…

行业实践案例:医疗行业数据治理的挑战与突破

“医疗数据不仅是资源,更关乎生命。” ——医疗行业的数据治理,是合规、安全、质量与智能化的多重挑战。 📘 本文目录 为什么医疗行业亟需数据治理? 医疗行业数据治理的独特挑战 医疗数据治理体系设计原则 关键能力模块与实践案例 工具选型与落地建议 总结与下一步 1️⃣ …

单细胞转录组学和空间转录组学数据的整合方法

文章目录问题1&#xff1a;现有技术是否可以拿取固定数目的细胞进行组合形成spot问题2&#xff1a;是否有关于这方面的研究问题3&#xff1a;相关论文推荐一、细胞反卷积的核心目标与挑战二、单细胞与空间转录组数据的整合方法分类1. 概率型方法&#xff08;Probabilistic-base…

【Java EE】SpringBoot 配置文件、日志和单元测试

1. 什么是配置文件在我们的计算机上诸如 C:/Users&#xff0c;C:/Windows&#xff0c;.config&#xff0c;.xml 都是配置文件&#xff0c;配置文件主要为了解决硬编码带来的问题。硬编码是将数据直接写在程序的源代码中&#xff0c;代码写死后再想改变就很麻烦。因此&#xff0…

CMake实践:常见的调试技巧

目录 1.简介 2.用 message() 输出关键信息 2.1.message简介 2.2.常用模式及作用 2.3.核心用法示例 2.4.常见问题及解决 3.查看缓存变量&#xff1a;cmake -L 与缓存文件 3.1.列出所有缓存变量&#xff08;cmake -L&#xff09; 3.2.直接查看 / 删除 CMakeCache.txt 4…

爬虫-第一个爬虫程序

浏览器里面都是html数据&#xff0c;拿到的都是页面源代码&#xff0c;可以用自己的方式打开测试。打开浏览器decode找charset

从SEO到GEO:优化策略如何应对传统搜索与AI搜索的巨变

AI 搜索与传统搜索结果优化之间有什么重叠之处&#xff1f; 为了帮助确定主要的差异&#xff0c;以及那些重叠程度最高的区域&#xff0c;我创建了一个比较&#xff08;我会保持更新&#xff09;&#xff0c;通过搜索行为、优化领域、结果展示和交付&#xff0c;以及要跟踪的 K…