NOIP普及组历届试题分析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

方法2:参考代码
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
var i, n, a, b, ans:longint; vis:array[0..20005]of 0..2; f:array[0..105]of longint; begin readln(n); fillchar(vis,sizeof(vis),0); for i:=1 to n do begin read(f[i]); vis[f[i]]:=1; end; ans:=0; for a:=1 to n do for b:=1 to n do if (vis[f[a]+f[b]]=1)and(a<>b) then begin inc(ans); vis[f[a]+f[b]]:=2; end; writeln(ans); end.
比例简化 (noip2014普及组第二题)



在社交媒体上,经常会看到针对某一个观点同意与 否的民意调查以及结果。例如,对某 一观点表示 支持的有 1498 人,反对的有 902 人,那么赞同与 反对的比例可以简单的记为1498:902。 不过,如果把调查结果就以这种方式呈现出来,大 多数人肯定不会满意。因为这个比例的数值太大, 难以一眼看出它们的关系。对于上面这个例子,如 果把比例记为 5:3,虽然与 真实结果有一定的误差, 但依然能够较为准确地反映调查结果,同时也显得 比较直观。 现给出支持人数 A,反对人数 B,以及一个上限 L, 请你将 A 比 B 化简为 A’比 B’,要求在 A’和 B’均 不大于 L 且 A’和 B’互质(两个整数的最大公约数 是 1)的前提下,A’/B’ ≥ A/B 且 A’/B’ - A/B 的值 尽可能小。
扫雷游戏 (noip2015普及组第二题)
扫雷游戏是一款十分经典的单机小游戏。 在 n 行 m 列的雷区中有一些格子含有地雷 (称之为地雷格) ,其他格子不含地雷(称之 为非地雷格) 。玩家翻开一个非地雷格时,该 格将会出现一个数字——提示周围格子中有多 少个是地雷格。 游戏的目标是在不翻出任何地 雷格的条件下,找出所有的非地雷格。 现在给出n行m列的雷区中的地雷分布, 要 求计算出每个非地雷格周围的地雷格数。 注:一个格子的周围格子包括其上、下、左、 右、左上、右上、左下、右下八个方向上与之 直接相邻的格子。
方法2:两层循环
两层循环枚举a,b的值,Βιβλιοθήκη Baidu断a+b是否存在:
for a=1 to n do for b=1 to n do if (vis[f[a]+f[b]]=1) and (a<>b) then begin inc(ans); vis[f[a]+f[b]]=2; //避免出现重复的等式 end;
模拟
字符串
贪心
NOIP普及组题型分布
题型 题目
简单 动态规划
子矩阵(2014p4)、小朋友的数字(2013p3) 摆花(2012p3)、导弹拦截(2010p3) 道路游戏(2009p4)、传球游戏(2008p3) 守望者的逃离(2007p3)、开心的金明(2006p2) 采药(2005p3)、数字游戏(2003p2)
数学/数论
数据结构 图论(提高组)
一、枚举类试题

枚举法的基本思想是根据提出的问题枚举所
有可能的解,并用问题给定的条件检验哪些
解是需要的,哪些解是不需要的。能使条件
成立,即为其解。

枚举法其实是最简单的搜索算法。
珠心算测验 (noip2014普及组第一题)

珠心算是一种通过在脑中模拟算盘变化来完成快 速运算的一种计算技术。珠心算训练,既能够开 发智力,又能够为日常生活带来很多便利,因而 在很多学校得到普及。
样例中,上述错误答案是4:3=1+2, 3=2+1, 4=1+3, 4=3+1
方法1:参考程序
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
var i,n,a,b,c,t,ans:longint; f:array[0..105]of longint; begin readln(n); for i:=1 to n do read(f[i]); ans:=0; for c:=1 to n do begin t:=0; for a:=1 to n do for b:=1 to n do if (f[c]=f[a]+f[b])and(t=0)and(c<>a)and(a<>b)and(c<>b) then begin inc(ans); t:=1; end; end; writeln(ans); end.
数字统计 (noip2010普及组第一题)
请统计某个给定范围[L, R]的所有整数中,数字2出现 的次数。 比如在给定范围[2, 22],数字2在数2中出现了1次,在 数12中出现了1次,在数20中出现了1次,在数21中出 现了1次,在数22中出现了2次,所以数字2在该范围内 一共出现了6次。 输入格式 输入共一行,为两个正整数L和R,之间用一个空格隔 开。 输出格式 输出共1行,表示数字2出现的次数。 样例输入:2 22 样例输出:6
28. 29. 30.
else begin if a[i][j-1]='*' then inc(s); if a[i][j+1]='*' then inc(s); if a[i+1][j-1]='*' then inc(s); if a[i+1][j+1]='*' then inc(s); if a[i+1][j]='*' then inc(s); if a[i-1][j-1]='*' then inc(s); if a[i-1][j+1]='*' then inc(s); if a[i-1][j]='*' then inc(s); write(s); end; end; writeln; end; end.
var i,a,b,ans:longint; begin readln(a,b); ans:=0; for i:=a to b do begin if i mod 10=2 then inc(ans); if i div 10 mod 10=2 then inc(ans); if i div 10 div 10 mod 10=2 then inc(ans); if i div 10 div 10 div 10 mod 10=2 then inc(ans); end; writeln(ans); end.
方法1:三层循环

考试中,有许多选手的程序是这样的,错 在哪里?
ans:=0; for c:=1 to n do for a:=1 to n do for b:=1 to n do if (f[c]=f[a]+f[b])and(c<>a)and(a<>b)and(c<>b) then inc(ans); writeln(ans);
对于100%的数据,3 ≤ n ≤ 100 测验题给出的正整数大小不超过10,000。
试题分析

题意大意:给你n个数,在这n个数中,找 到满足A+B=C的C的个数,注意不是这个 等式的个数。
样例中,1,2,3,4有1+2=3,1+3=4两个。

由于本题数据规模n<=100,我们可以直接
枚举C, A, B,三层循环解决问题。



试题分析
题目大意是给定a,b,统计a,b之间数字2出现 的次数。 从a到b直接枚举每一个数,判断这个数中含 有几个2。 for i=a to b do{ 求i中含2的个数t; ans=ans+t; } 输出t;
参考程序:
1. 2. 3.
4.
5. 6. 7. 8. 9. 10. 11. 12. 13.
问题分析:
一个格子的周围格子包括其上、下、左、右、左 上、右上、左下、右下八个方向上与之直接相 邻的格子。判断如下:



if a[i][j-1]='*' then inc(s); if a[i][j+1]='*' then inc(s); if a[i+1][j-1]='*' then inc(s); if a[i+1][j+1]='*' then inc(s); if a[i+1][j]='*' then inc(s); if a[i-1][j-1]='*' then inc(s); if a[i-1][j+1]='*' then inc(s); if a[i-1][j]='*' then inc(s);
方法2:两层循环
我们能不能使用两层循环呢?
由于本题测验题给出的正整数大小不超过 10,000,我们可以直接枚举A,B,判断A+B 在不在给定的数中即可。 定义一个数组vis,初始值为0; 读入数a[i]时,vis[a[i]]标记为1。
for i=1 to n do { read(f[i]); vis[f[i]]=1; }
质因数分解(2012p1)、细胞分裂(2009p3) Hanoi双塔问题(2007p4)、数列(2006p4) 循环(2005p4) 、栈(2003p3卡特兰数) 表达式求值(2013p2)、表达式的值(2011p4) FBI树(2004p1)、求先序排列(2001p2) 车站分级(2013p4 拓扑排序) 文化之旅(2012p4 floyd算法)
扫雷游戏 (noip2015普及组第二题)
输入样例 1 33 *?? ??? ?*? 输入样例 2 23 ?*? *??
输出样例 1 mine.out *10 221 1*1 输出样例 2 mine.out 2*1 *21
对于 100%的数据,1≤n≤100,1≤m≤100
问题分析:
本题也是简单的枚举类试题。 我们从雷区的第一行第一列(1,1)开始,判断它周围 有多少个地雷。 由于本题读入的是字符,读入时需要注意: readln(n,m); for i=1 to n do begin for j=1 to m do read(a[i][j]); readln; end;
参考程序:
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
var i,j,n,m,s:longint; a:array[0..105,0..105]of char; begin 16. readln(n,m); 17. for i:=1 to n do 18. begin 19. for j:=1 to m do read(a[i][j]); 20. readln; 21. end; 22. for i:=1 to n do 23. begin 24. for j:=1 to m do 25. begin 26. s:=0; 27. if a[i,j]='*' then write(a[i,j])
NOIP普及组历届试题分析
安徽省六安第一中学 江家和
引言
noip复赛的知识面很广泛,对选手的综合
素质考核要求更为严格,难度和分数的
阶梯层次更趋科学合理,对信息学活动 的推动力和社会公信力更为增强。
NOIP普及组题型分布
题型 枚举 题目 扫雷游戏(2015p2)、珠心算测验(2014p1) 数字统计(2010p1)、比例简化(2014p2) 金币(2015p1)、 螺旋方阵(2014p3)、计数问题(2013p1)、 寻宝(2012p2)、接水问题(2010p2) 数字反转(2011p1)、统计单词个数(2011p2) ISBN号码(2008p1)、乒乓球(2003p1) 排座椅(2008p2)、纪念品分组(2007p2)
某学校的珠心算老师采用一种快速考察珠心算加 法能力的测验方法。他随机生成一个正整数集合, 集合中的数各不相同,然后要求学生回答:其中 有多少个数,恰好等于集合中另外两个(不同的) 数之和? 最近老师出了一些测验题,请你帮忙求 出答案。

珠心算测验 (noip2014普及组第一题)



【输入】 输入共两行,第一行包含一个整数n,表示测试 题中给出的正整数个数。 第二行有n个正整数,每两个正整数之间用一个 空格隔开,表示测试题中给出的正整数。 【输出】 输出共一行,包含一个整数,表示测验题答案。 【样例输入】 【样例输出】 4 2 1234
相关文档
最新文档