2026年全国青少年信息学奥林匹克联赛(NOIP)普及组试题及详细答案_第1页
2026年全国青少年信息学奥林匹克联赛(NOIP)普及组试题及详细答案_第2页
2026年全国青少年信息学奥林匹克联赛(NOIP)普及组试题及详细答案_第3页
2026年全国青少年信息学奥林匹克联赛(NOIP)普及组试题及详细答案_第4页
2026年全国青少年信息学奥林匹克联赛(NOIP)普及组试题及详细答案_第5页
已阅读5页,还剩5页未读, 继续免费阅读

下载本文档

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

文档简介

2026年全国青少年信息学奥林匹克联赛(NOIP)普及组试题及详细答案考试时间:2026年10月18日14:30-16:30满分:400分答题说明:1.本试卷共四道题目,每题100分,总分400分;2.程序必须使用C++语言编写,禁止使用Python、Java等其他语言;3.程序需严格按照题目要求输入输出,不得输出多余内容、空格、换行;4.所有题目无部分分,测试点全部通过方可得分。第一题数字统计(100分)题目描述给定两个正整数L、R,统计区间[L,R]中,所有数位上包含数字6且不包含数字8的整数的个数。例如:6、16、62符合条件;8、68、18、23不符合条件。输入格式一行两个正整数L、R。输出格式一行一个整数,表示符合条件的数字总数。数据范围对于50%的数据,1≤L≤R≤1000;对于100%的数据,1≤L≤R≤100000。样例输入1120样例输出12样例解释1符合条件的数为6、16,共2个。解题思路1.遍历区间[L,R]内的每一个整数;2.对每个数逐位拆解,判断是否存在数位6,且全程无数位8;3.满足条件则计数器加一,最终输出计数器结果;4.数据范围最大为1e5,暴力遍历完全不会超时,解法简单高效。完整AC代码cpp

#include<iostream>

usingnamespacestd;

boolcheck(intx)

{

boolhas6=false;

while(x>0)

{

intd=x%10;

if(d==8)returnfalse;

if(d==6)has6=true;

x/=10;

}

returnhas6;

}

intmain()

{

intL,R;

cin>>L>>R;

intans=0;

for(inti=L;i<=R;i++)

{

if(check(i))ans++;

}

cout<<ans<<endl;

return0;

}代码解析1.自定义check函数专门校验数字合法性:逐位取余判断数位,遇到8直接返回不合法,遇到6标记存在6;2.主函数遍历区间所有数字,调用校验函数统计合法数量;3.逻辑清晰,无冗余运算,适配全部数据范围。第二题班级积分(100分)题目描述某班级有n名学生,学校每周会进行积分奖惩。初始所有学生积分均为0。现有m次操作,每次操作包含两个整数x、k:-若k>0:第x号学生积分增加k;-若k<0:第x号学生积分减少|k|;所有操作完成后,请输出全班积分最高的学生编号及其积分。若有多名学生积分相同且为最高分,输出编号最小的学生。输入格式第一行两个整数n、m;接下来m行,每行两个整数x、k。输出格式一行两个整数,分别为最高分学生的编号、对应积分。数据范围1≤n≤1000,1≤m≤5000;1≤x≤n;-100≤k≤100。样例输入1541203502503-10样例输出1250样例解释1操作后:1号20分、2号50分、3号40分、4号0分、5号0分,最高分是2号学生。解题思路1.定义数组存储每个学生的积分,初始值全部置0;2.循环处理每一次操作,根据编号更新对应学生的积分;3.遍历积分数组,记录最大值和最小编号的最优解;4.遍历过程中,仅当当前积分严格大于最大值时更新答案,保证同分取小编号。完整AC代码cpp

#include<iostream>

#include<cstring>

usingnamespacestd;

intscore[1005];

intmain()

{

intn,m;

cin>>n>>m;

memset(score,0,sizeof(score));

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

{

intx,k;

cin>>x>>k;

score[x]+=k;

}

intmaxsc=-1e9;

intid=1;

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

{

if(score[i]>maxsc)

{

maxsc=score[i];

id=i;

}

}

cout<<id<<""<<maxsc<<endl;

return0;

}代码解析1.使用memset初始化积分数组,保证初始积分全部为0;2.按输入依次更新每位学生积分,支持加减操作;3.正向遍历学生编号,自动满足同分取最小编号的要求,逻辑严谨。第三题最短路径(100分)题目描述现有一张无向图,包含n个节点、m条边,每条边的长度均为1。节点编号从1到n。请你求出从节点1到节点n的最短路径长度。若无法到达,输出-1。输入格式第一行两个整数n、m;接下来m行,每行两个整数u、v,表示u和v之间有一条无向边。输出格式一行一个整数,表示最短路径长度,无法到达输出-1。数据范围对于60%的数据,n≤100;对于100%的数据,1≤n≤1000,1≤m≤5000。样例输例输出12样例解释1最短路径为1→3→4,长度为2。解题思路1.无权图的最短路径问题,标准BFS(广度优先搜索)模板题;2.BFS逐层遍历节点,首次到达终点的层数即为最短路径长度;3.建立邻接表存储图结构,设置距离数组记录各节点到起点的距离,初始为-1(未访问);4.起点距离置0,入队搜索,遍历完成后输出终点距离即可。完整AC代码cpp

#include<iostream>

#include<vector>

#include<queue>

#include<cstring>

usingnamespacestd;

vector<int>g[1005];

intdis[1005];

intmain()

{

intn,m;

cin>>n>>m;

memset(dis,-1,sizeof(dis));

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

{

intu,v;

cin>>u>>v;

g[u].push_back(v);

g[v].push_back(u);

}

queue<int>q;

dis[1]=0;

q.push(1);

while(!q.empty())

{

intnow=q.front();

q.pop();

for(inti=0;i<g[now].size();i++)

{

intnex=g[now][i];

if(dis[nex]==-1)

{

dis[nex]=dis[now]+1;

q.push(nex);

if(nex==n)//提前找到终点,可直接退出

{

cout<<dis[nex]<<endl;

return0;

}

}

}

}

cout<<-1<<endl;

return0;

}代码解析1.邻接表存储无向图,适配题目数据范围,空间利用率高;2.距离数组初始化为-1,区分未访问节点,起点距离初始为0;3.BFS遍历过程中,每遍历一层节点距离加一,保证最短性;4.找到终点后直接输出结果退出程序,优化运行效率。第四题最大子段和(100分)题目描述给定一个长度为n的整数序列,求该序列的最大子段和。子段定义:序列中连续的一段元素,允许子段长度为1。例如:序列-21-34-121-54,最大子段和为4+(-1)+2+1=6。输入格式第一行一个整数n;第二行n个整数,为序列的全部元素。输出格式一行一个整数,表示最大子段和。数据范围对于70%的数据,n≤1000;对于100%的数据,1≤n≤100000,元素范围[-1000,1000]。样例输入19-21-34-121-54样例输出16解题思路1.本题为经典最大子段和问题,采用贪心算法(Kadane算法)求解,时间复杂度O(n),可适配1e5大数据;2.维护两个变量:当前子段和、全局最大子段和;3.遍历每个元素,若当前子段和为负数,直接舍弃,从当前元素重新开始累加;4.每次累加后更新全局最大值,遍历结束后即为答案;5.特殊适配全负数序列,保证选取最大的单个负数。完整AC代码cpp

#include<iostream>

#include<algorithm>

usingnamespacestd;

constintMAXN=100005;

inta[MAXN];

intmain()

{

ios::sync_with_stdio(false);

cin.tie(0);

intn;

cin>>n;

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

{

cin>>a[i];

}

intnow=a[1];

intans=a[1];

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

{

now=max(a[i],now+a[i]);

ans=max(ans,now);

}

cout<<ans<<endl;

return0;

}代码解析1.加入ios快读优化,适配1e5级别的大数据输入,避免超时;2.初始化当前和、最大值为第一个元素,适配全负数场景;3.核心逻辑:

温馨提示

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

评论

0/150

提交评论