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

下载本文档

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

文档简介

2026年CCFNOIP全国青少年信息学奥林匹克联赛提高组试题及详细答案考试说明1.试题共4道,满分400分,考试时长3小时。2.严格遵循NOIP评测规则,所有程序需使用标准输入输出,禁止文件读写、特殊函数调用。3.编程语言仅限C/C++,评测环境为NOILinux2.0。4.每题包含10组测试数据,包含样例数据、极限数据、边界数据,按测试点分步给分。2026NOIP提高组试题T1校园打卡(clock)题目描述学校打卡系统规则如下:学生每日打卡时间为00:00-23:59,定义合法打卡时段为每日07:00-22:00。给定一个学生n次打卡的时分时间,统计该学生合法打卡次数与非法打卡次数。合法打卡:打卡时间在07:00:00(含)至22:00:00(不含)之间。非法打卡:其余所有打卡时间。输入格式第一行一个整数n,表示打卡次数。接下来n行,每行两个整数h,m,分别表示本次打卡的小时、分钟。输出格式一行两个整数,依次为合法打卡次数、非法打卡次数。数据范围对于100%的数据:1≤n≤10000,0≤h≤23,0≤m≤59。样例输入56597012302159220样例输出32T2数列求和(sum)题目描述给定一个长度为n的整数数列a,定义区间[l,r]的价值为区间内所有数的总和。现在需要你求出,所有长度不小于k的区间的价值总和。输入格式第一行两个整数n,k。第二行n个整数,表示数列a的所有元素。输出格式一行一个整数,表示所有合法区间的价值总和。数据范围对于30%数据:n≤100;对于60%数据:n≤1000;对于100%数据:1≤k≤n≤10^5,-100≤a[i]≤100。样例输入32123样例输出18样例解释合法区间:[1,2](和3)、[2,3](和5)、[1,3](和6),总和3+5+6=18。T3最短路径(road)题目描述给定一张n个点、m条边的无向连通图,每条边拥有正整数边权。定义特殊路径:从1号节点出发,到n号节点结束,路径中恰好经过两条不同的边的路径。若不存在此类路径,输出-1。求所有特殊路径中,路径总权值的最小值。输入格式第一行两个整数n,m。接下来m行,每行三个整数u,v,w,表示u、v之间有一条权值为w的无向边。输出格式一行一个整数,表示符合条件的最短路径长度,无合法路径输出-1。数据范围对于40%数据:n≤20,m≤50;对于70%数据:n≤100,m≤1000;对于100%数据:3≤n≤500,1≤m≤20000,1≤w≤1000。样例输入45121242135341231样例输出4样例解释最优路径:1→2→3→4不满足条件,合法最优路径为1→2→4,总权值1+2=4,恰好两条边。T4子集异或(xor)题目描述给定n个非负整数,求满足以下条件的子集数量:子集内所有元素的异或和严格大于子集内所有元素的和的一半。空集不计入统计,单个元素的子集默认合法。输入格式第一行一个整数n。第二行n个非负整数a[1]~a[n]。输出格式一行一个整数,表示合法子集数量,答案对998244353取模。数据范围对于30%数据:n≤15;对于60%数据:n≤20;对于100%数据:1≤n≤30,0≤a[i]≤10^9。样例输入212样例输出3样例解释合法子集:{1}、{2}、{1,2},共3个。子集{1,2}异或和为3,和为3,3>1.5,满足条件。2026NOIP提高组详细答案与解析T1校园打卡题解解题思路本题为基础模拟题,核心是时间区间判定。将时间统一换算为分钟数可简化判断:1.每日合法时间:7*60=420分钟~22*60=1320分钟;2.每次打卡时间转换为总分钟数t=h*60+m;3.420≤t<1320为合法打卡,其余为非法打卡;4.遍历所有打卡记录,统计两类次数即可。满分代码cpp

#include<iostream>

usingnamespacestd;

intmain(){

intn;

cin>>n;

intok=0,no=0;

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

inth,m;

cin>>h>>m;

intt=h*60+m;

if(t>=420&&t<1320)ok++;

elseno++;

}

cout<<ok<<""<<no<<endl;

return0;

}得分点说明1.正确转换时间单位、边界判断无误(60分);2.完整遍历、统计结果正确、输出格式标准(40分);3.常见错误:包含22:00整点、遗漏0点凌晨时段判定。T2数列求和题解解题思路暴力枚举所有区间会超时(O(n²)无法通过1e5数据),需推导数学规律优化至O(n)。核心结论:统计每个数a[i]在所有合法区间中出现的次数,最终总和=Σ(a[i]×出现次数)。对于第i个元素(下标从1开始):左端点可选范围:1~i,共i种选择;右端点需满足区间长度≥k,合法右端点数量:n-max(i+k-1-1,i-1)=n-i-k+2;最终出现次数:i×(n-i-k+2)。满分代码cpp

#include<iostream>

usingnamespacestd;

typedeflonglongll;

intmain(){

intn,k;

cin>>n>>k;

llans=0;

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

llx;

cin>>x;

llcnt=1ll*i*(n-(i+k-1)+1);

ans+=x*cnt;

}

cout<<ans<<endl;

return0;

}得分点说明1.暴力O(n²)写法可通过60%数据(n≤1000);2.推出单次贡献公式、使用longlong防溢出,满分通过(40分);3.易错点:int类型溢出、区间长度公式推导错误。T3最短路径题解解题思路题目要求:1→n恰好经过两条边的最短路径,即路径形式为1→x→n(x为中间中转节点)。解题步骤:1.预处理所有节点到1号点的最短路d1[];2.预处理所有节点到n号点的最短路dn[];3.遍历所有中转点x(x≠1、x≠n),计算d1[x]+dn[x],取最小值;4.若无合法中转点,输出-1。本题为无向图、边权为正,直接使用Floyd或Dijkstra均可,Floyd代码简洁适配n≤500的数据。满分代码cpp

#include<iostream>

#include<cstring>

#include<algorithm>

usingnamespacestd;

constintINF=0x3f3f3f3f;

intn,m;

intdis[505][505];

intmain(){

memset(dis,0x3f,sizeof(dis));

for(inti=1;i<=500;i++)dis[i][i]=0;

cin>>n>>m;

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

intu,v,w;

cin>>u>>v>>w;

dis[u][v]=min(dis[u][v],w);

dis[v][u]=min(dis[v][u],w);

}

//Floyd预处理最短路

for(intk=1;k<=n;k++)

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

for(intj=1;j<=n;j++)

dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);

intans=INF;

for(intx=2;x<n;x++){

if(dis[1][x]!=INF&&dis[x][n]!=INF)

ans=min(ans,dis[1][x]+dis[x][n]);

}

if(ans==INF)cout<<-1<<endl;

elsecout<<ans<<endl;

return0;

}得分点说明1.暴力搜索路径可通过40%数据;2.正确预处理最短路、枚举中转点,通过全部数据(60分);3.易错点:未去重边、未判断路径合法性、初始化无穷值过小。T4子集异或题解解题思路n≤30,暴力枚举2^30子集无法通过,采用折半搜索,时间复杂度O(2^15),完全适配数据范围。解题核心:1.将数组分为左右两半,分别枚举所有子集,记录每种子集的「总和sum、异或值xor」;2.合并左右子集,统计满足xor>sum/2的组合数量;3.单个半区的合法子集直接统计,跨半区的合法子集合并统计。关键性质:对于任意非空子集,异或和与和满足判定条件,结合折半搜索高效枚举所有情况。满分代码cpp

#include<iostream>

#include<vector>

#include<algorithm>

usingnamespacestd;

typedeflonglongll;

constintMOD=998244353;

intn;

lla[35];

structNode{

llsum,xorval;

};

vector<Node>L,R;

//枚举区间[l,r]所有子集

voiddfs(intl,intr,vector<Node>&res){

res.clear();

intlen=r-l+1;

for(ints=1;s<(1<<len);s++){

llsum=0,xorv=0;

for(inti=0;i<len;i++){

if(s&(1<<i)){

sum+=a[l+i];

xorv^=a[l+i];

}

}

res.push_back({sum,xorv});

}

}

intmain(){

cin>>n;

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

intmid=n/2;

dfs(1,mid,L);

dfs(mid+1,n,R);

llans=0;

//统计左半区合法子集

for(autop:L)if(p.xorval*2>p.sum)ans++;

//统计右半区合法子集

for(autop:R)if(p.xorval*2>p.sum)ans++;

//统计跨区间合法子集

for(autop:L){

for(autoq:R){

lls=p.sum+q.sum;

llx=p.xorval^q.xorval;

if(x*2>s)

温馨提示

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

评论

0/150

提交评论