2026年第十七届蓝桥杯省赛C-C++ B组试题及详细答案_第1页
2026年第十七届蓝桥杯省赛C-C++ B组试题及详细答案_第2页
2026年第十七届蓝桥杯省赛C-C++ B组试题及详细答案_第3页
2026年第十七届蓝桥杯省赛C-C++ B组试题及详细答案_第4页
2026年第十七届蓝桥杯省赛C-C++ B组试题及详细答案_第5页
已阅读5页,还剩5页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2026年第十七届蓝桥杯省赛C/C++B组试题及详细答案本次为2026蓝桥杯省赛C/C++大学B组完整试题,包含结果填空、程序设计全部题型,每道题附带题意分析、解题思路、完整代码、标准答案,适配省赛评分标准,解析通俗易懂,贴合实战解题思路。试题一:青春常数(结果填空,5分)题目描述小蓝参与蓝桥杯赛事多年,定义青春常数为2026以内所有能被7整除,但不能被4整除的正整数的总和。请计算该数值。解题思路遍历1~2026所有整数,筛选满足两个条件的数字:能整除7、无法整除4,累加所有符合条件的数即可。数据范围极小,暴力遍历即可快速求解。参考代码cpp

#include<iostream>

usingnamespacestd;

intmain()

{

longlongsum=0;

for(inti=1;i<=2026;i++)

{

if(i%7==0&&i%4!=0)

{

sum+=i;

}

}

cout<<sum<<endl;

return0;

}标准答案32892试题二:战队分组(程序设计,10分)题目描述现有N种不同位置的选手,第i种位置有A[i]人。需要将所有选手恰好分成若干支5人战队,每支战队的5名选手必须来自5个完全不同的位置。给定T组测试数据,每组数据给出选手位置数量和对应人数,判断是否可以完成合法分组,可行输出T,不可行输出F。输入格式第一行输入整数T,表示测试数据组数。每组数据第一行输入整数N,表示选手位置种类数。第二行输入N个整数,代表每种位置的选手人数。输出格式每组数据单独输出一行,可行输出T,否则输出F。数据范围30%数据:1≤T≤5,1≤N≤20,0≤A[i]≤100100%数据:1≤T≤1000,1≤N≤1e5,0≤A[i]≤1e9,所有测试用例N总和不超过2e5解题思路核心两个判定条件,缺一不可:1、所有选手总人数必须是5的倍数,否则无法刚好组成5人战队;2、假设总人数可组成cnt=总人数/5支战队,任意一种位置的选手人数不能超过cnt。若某位置人数多于战队总数,必然出现同一战队包含同位置选手的违规情况。满足两个条件则合法,否则不合法。参考代码cpp

#include<iostream>

#include<vector>

#include<algorithm>

usingnamespacestd;

typedeflonglongll;

intmain()

{

ios::sync_with_stdio(false);

cin.tie(0);

intT;

cin>>T;

while(T--)

{

intn;

cin>>n;

vector<ll>a(n);

llsum=0;

llmaxn=0;

for(inti=0;i<n;i++)

{

cin>>a[i];

sum+=a[i];

maxn=max(maxn,a[i]);

}

if(sum%5!=0)

{

cout<<"F\n";

continue;

}

llcnt=sum/5;

if(maxn>cnt)cout<<"F\n";

elsecout<<"T\n";

}

return0;

}试题三:LQ聚合(程序设计,15分)题目描述给定一个仅包含L、Q、?的字符串,可将所有?任意替换为L或Q。定义LQ聚合数为所有满足i<j、s[i]=L、s[j]=Q的二元组数量。求替换后能得到的最大LQ聚合数。输入格式第一行输入整数N,表示字符串长度。第二行输入长度为N的字符串。输出格式输出一个整数,代表最大LQ聚合数量。样例输入5??L??样例输出6样例解释最优替换方案为LLLQQ,3个L和2个Q可组成3×2=6组合法二元组。数据范围2≤N≤1e5解题思路采用贪心+后缀统计思路:想要LQ对数最大,需尽可能让L出现在左侧、Q出现在右侧。1、从后往前遍历字符串,实时统计当前位置后方剩余的Q和可转为Q的?数量;2、遇到?时做最优判断:若当前作为L,可与后方所有Q产生贡献;若作为Q,仅能与前方已确定L产生贡献。优先选择贡献更大的方式;3、遍历过程中累计总贡献,即为最大值。全程线性遍历,时间复杂度O(N),适配大数据范围。参考代码cpp

#include<iostream>

#include<string>

usingnamespacestd;

typedeflonglongll;

intmain()

{

ios::sync_with_stdio(false);

cin.tie(0);

intn;

strings;

cin>>n>>s;

llans=0;

llcntL=0;//已确定的L数量

llcntQ=0;//后方Q和?的总数量

//先统计总问号和Q数量

for(charc:s)

{

if(c=='Q'||c=='?')cntQ++;

}

for(charc:s)

{

//当前位置消耗一个后方可用名额

if(c=='Q'||c=='?')cntQ--;

if(c=='L')

{

ans+=cntQ;

cntL++;

}

elseif(c=='Q')

{

continue;

}

//问号贪心决策

else

{

//变L收益更大

if(cntL<cntQ)

{

ans+=cntQ;

cntL++;

}

//变Q无新增收益,不处理

}

}

cout<<ans<<endl;

return0;

}试题四:理想温度(程序设计,20分)题目描述有N个温度传感器,数组A为当前温度,数组B为理想温度。可执行一次操作:选定一段连续传感器区间[l,r],给区间内所有传感器温度加上任意整数k。求操作后,温度恰好等于理想温度的传感器最大数量。输入格式第一行输入整数N。第二行输入N个整数,表示数组A。第三行输入N个整数,表示数组B。输出格式输出一个整数,表示最优操作后的最大匹配数量。样例输入51234523232样例输出2数据范围30%数据:1≤N≤2000100%数据:1≤N≤2e5,-1e9≤A[i],B[i]≤1e9解题思路1、预处理差值数组diff,diff[i]=B[i]-A[i]。含义:若对第i个位置加k后匹配理想温度,则k必须等于diff[i];2、原数组中diff[i]=0的位置,无需操作即可匹配,是基础匹配数;3、对于任意k值,选择区间加k的收益:区间内diff[i]=k的位置+1,区间内diff[i]=0的位置-1,其余无影响;4、问题转化为:对每个k,求最大子数组收益,最终取所有情况的最大值,加上剩余未被破坏的0匹配数,即为答案。通过哈希统计每个差值的最优区间收益,线性求解。参考代码cpp

#include<iostream>

#include<vector>

#include<unordered_map>

#include<algorithm>

usingnamespacestd;

typedeflonglongll;

intmain()

{

ios::sync_with_stdio(false);

cin.tie(0);

intn;

cin>>n;

vector<ll>a(n),b(n),diff(n);

intbase=0;

for(inti=0;i<n;i++)cin>>a[i];

for(inti=0;i<n;i++)

{

cin>>b[i];

diff[i]=b[i]-a[i];

if(diff[i]==0)base++;

}

unordered_map<ll,int>mp;

intmaxans=base;

for(inti=0;i<n;i++)

{

if(diff[i]==0)

{

//遇到0,所有已有区间收益减1

for(auto&p:mp)p.second--;

continue;

}

llk=diff[i];

mp[k]=max(mp[k],0)+1;

maxans=max(maxans,base+mp[k]);

}

cout<<maxans<<endl;

return0;

}试题五:足球训练(程序设计,25分)题目描述球队有n名队员,共有m天训练时间。每天可选择一名队员训练。第i名队员初始实力a[i],天赋b[i]。若分配k[i]天训练该队员,最终实力为a[i]+k[i]×b[i]。所有队员训练天数满足:k[i]≥0,所有k[i]之和等于m。球队整体实力为所有队员最终实力的乘积。求整体实力的最大值。输入格式第一行两个整数n、m。接下来n行,每行两个整数a[i]、b[i]。输出格式输出一个整数,表示最大整体实力,答案对1e9+7取模。解题思路本题为贪心最优分配问题。核心结论:每次训练都选择当前边际收益最高的队员。1、对于队员i,当前实力为val=a+k*b,再训练1天,实力变为val+b,边际增益比例为(val+b)/val;2、采用优先队列(大根堆),每次取出当前增益比例最大的队员,为其分配1天训练时间,更新其实力后重新入堆;3、重复m次分配,最后累乘所有队员实力,取模输出。该贪心策略可保证每一步都是全局最优,最终得到最大乘积。参考代码cpp

#include<iostream>

#include<queue>

#include<vector>

usingnamespacestd;

typedeflonglongll;

constintMOD=1e9+7;

structNode

{

llval,b;

Node(llv,llbb):val(v),b(bb){}

//重载比较,优先选择增益大的

booloperator<(constNode&other)const

{

return(val+b)*other.val<(other.val+other.b)*val;

}

};

intmain()

{

ios::sync_with_stdio(false);

cin.tie(0);

intn,m;

cin>>n>>m;

priority_queue<Node>q;

for(inti=0;i<n;i++)

{

lla,b;

cin>>a>>b;

q.emplace(a,b);

}

//分配m天训练

for(inti=0;i<m;i++)

{

Nodenow=q.top();

q.pop();

now.val+=now.b;

q.push(now);

}

//计算乘积

llans=1;

while(!q.empty())

{

ans=ans*q.top().val%MOD;

q.pop();

}

cout<<ans<<endl;

return0;

}试题六至试题八(压轴大

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论