NOIP2010题解报告(普及组&&提高组)

合集下载

Noip 2010普及组解题报告

Noip 2010普及组解题报告

解析1、数字统计【思路分析】这道题属于简单题,用一个FOR把数都检查一遍,里面再用while剥皮看看有多少个2。

【参考程序】VarI,n,l,r,s:integer;BeginAssign(input,’two.in’);Assign(output,’two.out’);Readln(l,r);S:=0;For i:=1 to r doBeginN:=I;While n>0 doBeginIf n mod 10=2 then s:=s+1;N:=n div 10;End;End;Writeln(s);Close(input);close(output;)End.2、接水问题【思路分析】方法一:用一个数组,存放每个水龙头当前还需要多少时间装完这桶水;然后一个一个人去轮,每次找最快装完的水龙头,接着把当前轮到的那个人所需要的时间加到格子里;最后轮完以后,还要把数组里的最大值输出。

【参考程序】Vara:=array[1..10000]of integer;b:=array[1..100]of longint;m,n,i,k,t,max,min:longint;beginassign(input,'water.in');assign(output,'water.out');reset(input);rewrite(output);readln(n,m);for i:=1 to n do read(a[i]);fillchar(b,sizeof(b),0);max:=0;k:=1;while(k<=n) dobeginmin:=maxlongint;t:=0;for i:=1 to m doif b[i]<min thenmin:=b[i];t:=i;end;b[t]:=b[t]+a[k];k:=k+1;if b[t]>max then max=b[t];end;writeln(max);close(input);close(output);end.方法二:用一个数组,存放每个水龙头当前还需要多少时间装完这桶水,并按照时间长短从大到小安排好;然后一个一个去轮,显然最快装完的水龙头总是最后一个,这样只要把当前轮到的那个人所需的时间加到最后那个元素里,再把数组排序好(很明显,这里要用插入排序效率最高);最后只要输出数组第一个元素就可以了。

NOIP2010普及组解题报告

NOIP2010普及组解题报告

NOIP2010普及组复赛解题报告(pascal)---------By 锦云第一题:two.pas本题没有什么技术含量,主要有三种方法:1.用枚举(找范围再分别处理,很麻烦)2.用分解(一步步分解,较简便)3.用先转换成字符串再做(很简便)参考程序:(在此只提供第二种解法的分解部分和第三种解法)第二种:Function fjtwo(a:integer):integer;Var cnt,tmp:integer;BeginCnt:=0;While a>0 doBeginTmp:=a mod 10;If tmp=2 then inc(cnt);Tmp:=tmp div 10;End;Fjtwo:=cnt;End;第三种:Var s:string;L,r,i,j,cnt:integer;BeginAssign(input,’two.in’);reset(input);Assign(output,’two.out’);rewrite(output);Readln(l,r);Cnt:=0;For i:=l to r doBeginString(I,s);For j:=1 to length(s) doIf s[i]=’2’ then inc(cnt);End;Writeln(cnt);Close(input);Close(output);End.第二题:water.pas本题主要是考验考生们的细心程度,从而找到最佳方案。

想了一想,本题采用模拟法,于是有了加或者减的方法。

1.减法(纯粹模拟)2.加法(更优模拟)注:减法时最好不要时间一点一点的模拟,找最小得数减。

参考程序:(本题提供较简单的写法加法)Var a:array[1..10000] of integer;N,mI,j,k:longint;BeginAssign(input,’water.in’);reset(input);Assign(output,’water.out’);rewrite(output);Readln(n,m);For i:=1 to n doRead(a[i]);For i:=m+1 to n doBeginK:=1;For j:=1 to m doIf a[j]<a[k] then k:=j;Inc(a[k],a[i]);End;K:=1;For i:=1 to m doIf a[i]>a[k] then k:=I;Writeln(a[k]);Close(input);Close(output);End.第三题:missile.pas本题实在是很难解决,n最大可以达到100000,而最优解的算法可以用搜索,但是n太大时,时间肯定不行,只好退而求其次,用贪心算法(无法得最优解但有70分,很不错了)参考程序:(贪心)Var l,n,x1,y1,x2,y2,tmpx,tmpy,max1,max2,jg1,jg2:longint;beginassign(input,'missile.in');reset(input);assign(output,'missile.out');rewrite(output);readln(x1,y1,x2,y2);readln(n);max1:=0;max2:=0;for i:=1 to n dobeginreadln(tmpx,tmpy);jg1:=sqr(abs(tmpx-x1))+sqr(abs(tmpy-y1));jg2:=sqr(abs(tmpx-x2))+sqr(abs(tmpy-y2));if (jg1>max1)and(jg2>max2) then if jg1<jg2 then max1:=jg1else max2:=jg2;end;writeln(max1+max2);close(input);close(output);end.第三题:解答本题,必须看清题意,知道以下几点:一、只需要选两次,由于比胜负靠的是双方武将中默契值最大的一对,所以除了默契值最大的一对,其他的武将都是没用的。

【通用】信息学奥赛NOIP普及组历届试题分析.ppt

【通用】信息学奥赛NOIP普及组历届试题分析.ppt
枚举法其实是最简单的搜索算法。
.,.,
4
珠心算测验 (noip2014普及组第一题)
珠心算是一种通过在脑中模拟算盘变化来完成快 速运算的一种计算技术。珠心算训练,既能够开 发智力,又能够为日常生活带来很多便利,因而 在很多学校得到普及。
某学校的珠心算老师采用一种快速考察珠心算加 法能力的测验方法。他随机生成一个正整数集合, 集合中的数各不相同,然后要求学生回答:其中 有多少个数,恰好等于集合中另外两个(不同的) 数之和? 最近老师出了一些测验题,请你帮忙求 出答案。
不过,如果把调查结果就以这种方式呈现出来,大 多数人肯定不会满意。因为这个比例的数值太大, 难以一眼看出它们的关系。对于上面这个例子,如 果把比例记为 5:3,虽然与 真实结果有一定的误差, 但依然能够较为准确地反映调查结果,同时也显得 比较直观。
现给出支持人数 A,反对人数 B,以及一个上限 L, 请你将 A 比 B 化简为 A’比 B’,要求在 A’和 B’均 不大于 L 且 A’和 B’互质(两个整数的最大公约数 是 1)的前提下,A’/B’ ≥ A/B 且 A’/B’ - A/B 的值 尽可能小。
输入样例 2 23 ?*? *??
输出样例 2 mine.out 2*1 *21
对于 100%的数据,1≤n≤100,1≤m≤100
.,.,
10
比例简化 (noip2014普及组第二题)
在社交媒体上,经常会看到针对某一个观点同意与 否的民意调查以及结果。例如,对某 一观点表示 支持的有 1498 人,反对的有 902 人,那么赞同与 反对的比例可以简单的记为1498:902。
.,.,
11
比例简化 (noip2014普及组第二题)
输入格式 输入共一行,包含三个整数 A,B,L,每两个整

NOIP普及组历届试题分析

NOIP普及组历届试题分析

对于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,三层循环解决问题。
扫雷游戏 (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;
比例简化 (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 的值 尽可能小。

CSP-J (NOIP普及组) 复赛2010-2023考查内容一览表

CSP-J (NOIP普及组) 复赛2010-2023考查内容一览表

CSP-J (NOIP提高组) 复赛2010-2020考查内容NOIP2017提高组T4奶酪深搜、广搜、并查集T5宝藏状压DPT6列队线段树NOIP2016提高组T1玩具谜题模拟T2天天爱跑步倍增LCAT3换教室动态规划(高级)T4组合数问题前缀和、杨辉三角T5蚯蚓队列、单调性T6愤怒的小鸟状压DPNOIP2015提高组T1神奇的幻方模拟T2信息传递并查集T3斗地主动态规划(高级)、深搜T4跳石头二分T5子串滚动数组、动态规划(高级) T6运输计划二分、LCA、非递归NOIP2014提高组T1生活大爆炸版石头剪刀布模拟T2联合权值动态规划(高级)、前缀和T3飞扬的小鸟动态规划(高级)T4无线网络发射器选址枚举T5寻找道路最短路T6解方程数论、枚举NOIP2013提高组T1转圈游戏快速幂T2火柴排队归并排序、逆序对T3货车运输最小生成树、LCA、倍增T4积木大赛贪心T5花匠贪心T6华容道广搜、剪枝NOIP2012提高组T1Vigenere密码枚举、模拟T2国王游戏贪心、高精度T3开车旅行平衡树、倍增T4同余方程扩展欧几里得T5借教室线段树T6疫情控制二分、倍增NOIP2011提高组T1铺地毯模拟T2选择客栈动态规划(高级)、RMQ T3Mayan游戏T4计算系数组合数学T5聪明的质监员二分T6观光公交贪心NOIP2010提高组T1机器翻译队列T2乌龟棋动态规划T3关押罪犯二分、并查集T4引水入城广搜、动态规划T3摆渡车动态规划(高级) T4对称二叉树二叉树NOIP2017普及组序号题名考查内容T1成绩顺序结构T2图书管理员结构体排序T3棋盘深搜、剪枝T4跳*房*子二分、动态规划NOIP2016普及组序号题名考查内容T1买铅笔一重循环T2回文日期回文T3海港大模拟、队列T4魔*法*阵枚举、前缀和NOIP2015普及组序号题名考查内容T1金*币一重循环T2扫*雷*游*戏二维数组T3求和组合数学T4推销员贪心、优先队列NOIP2014普及组序号题名考查内容T1珠心算测验模拟T2比例简化枚举、gcdT3螺旋矩阵模拟、找规律T4子矩阵动态规划(高级)NOIP2013普及组序号题名考查内容T1记数问题二重循环T2表达式求值栈T3小朋友的数字动态规划(高级) T4车站分级拓扑排序NOIP2012普及组序号题名考查内容T1质因数分解一重循环、质数T2寻*宝模拟、取模T3摆花背包、动态规划T4文化之旅最短路NOIP2011普及组序号题名考查内容T1数字反转进制转换T2统计单词数字符串T3瑞士轮归并排序T4表达式的值动态规划(高级)、栈NOIP2010普及组序号题名考查内容T1数字统计二维数组T2接水问题模拟T3导*弹*拦*截贪心T4三*国*游*戏贪心、博弈。

NOIP2010信息学奥赛初赛普及组模拟试题(二)

NOIP2010信息学奥赛初赛普及组模拟试题(二)

NOIP2010初赛模拟试题(六)(普及 Pascal语言二小时完成)●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●一.单项选择题(共20题,每题1.5分,共计30分。

每题有且仅有一个正确答案。

)1、.在所有由两个1和六个0组成的8位二进制整数(补码)中,最小的数是:()A.-127B.-64 C.-128 D.-652、.在一棵二叉树结点的先根序列、中根序列和后根序列中,所有叶子结点的先后顺序()A.都不相同B.完全相同C.先序和中序相同,而与后序不同D.中序和后序相同,而与先序不同3、下面有效的IP地址是:()A.202.280.130.45 B.130.192.33.45C.192.256.130.45 D.280.192.33.4564、一台具有1024*768分辨率、可显示65 536种颜色的显示器,其显示适配器(显示卡)上显示存储器容量的配置为:()A.512K B.1MB C.大于1.6MB,小于2MB D.2MB5、进行二分法查找,则线性表()A.必须顺序方式存储B.必须以链接方式存储,且数据元素已按值排好序C.必须以链接方式存储D.必须以顺序方式存储,且数据元素已按值排好序6、机器语言是用()编写的。

A.二进制码B.ASCII码C.十六进制码D.国标码7、一棵含有101个结点的完全二叉树存储在数组A[1..101]中,对1≤k≤101,若 A[k]是叶子结点,则k的最小值是:()A.51 B.50 C.49 D.488、不同的计算机,其指令系统也不相同,这主要取决于()A. 所用的操作系统B. 系统的总体结构C. 所用的CPUD. 所用的程序设计语言9、计算机主机是由CPU 与()构成的。

A.控制器B。

输入、输出设备C.运算器D.内存储器10、计算机系统总线上传送的信号有()。

A.地址信号与控制信号B.数据信号、控制信号与地址信号C.控制信号与数据信号D.数据信号与地址信号11、计算机的运算速度取决于给定的时间内,它的处理器所能处理的数据量。

NOIP2010普及组复赛试题

NOIP2010普及组复赛试题

全国信息学奥林匹克联赛(NOIP2010)复赛普及组(请选手务必仔细阅读本页内容)一.题目概览中文题目名称数字统计接水问题导弹拦截三国游戏英文题目名称two water missile sanguo可执行文件名two water missile sanguo 输入文件名two.in water.in missile.in sanguo.in 输出文件名two.out water.out missile.out sanguo.out每个测试点时限1秒1秒1秒1秒测试点数目10 10 10 10每个测试点分值10 10 10 10 比较方式全文比较(过滤行末空格及文末回车)题目类型传统传统传统传统二.提交源程序文件名对于pascal语言two.pas water.pas missile.pas sanguo.pas 对于C语言two.c water.c missilel.c sanguo.c 对于C++语言two.cpp water.cpp missile.cpp sanguo.cpp三.编译命令(不包含任何优化开关)对于pascal语言fpc two.pas fpc water.pas fpc missile.pas fpc sanguo.pas对于C语言gcc –o twoTwo.c -lm gcc –o waterwater.c -lmgcc –o missileball.c -lmgcc –o sanguosanguo.c -lm对于C++语言g++ –o twotwo.cpp -lmg++ –o seatwater.cpp -lmg++ –o missilemissile.cpp -lmg++ –o sanguosanguo.cpp -lm四.运行内存限制运行内存上限128M 128M 128M 128M注意事项:1、文件名(程序名和输入输出文件名)必须使用英文小写。

2、C/C++中函数 main()的返回值类型必须是 int,程序正常结束时的返回值必须是 0。

深入Noip2010初赛试题和全解

深入Noip2010初赛试题和全解

作者:钟野梓序今年Noip2010初赛刚结束,网上便铺天盖地地响起了“今年初赛好容易”“分数线一定很高,怎么办……”之类的声音。

确实,自2008年起,Noip初赛难度确有逐年下降的趋势,然而这并不是出题水平降低的缘故,相反,我认为这是中国计算机协会(下称CCF)对于N oip考核目的的审视和改变所导致的必然结果。

因此,我试图通过深入解析本届Noip初赛试囗题,来探寻这种变化下面深层的规律,从而令信息学竞赛选手能更好地备战往后数届的Noip初赛,让初赛不再成为一个问题。

由于条件所限,本文仅以Pascal语言的提高组试囗题作为对象进行分析,相对于普及组而言提高组试囗题一向具有较高的难度和较好的区分度,作为研究对象是个很好的选择;至于说语言的选择,仅是因为笔者个人选择原因。

一、概况本届题目在设置方面与往年相似,由选择题(普及组仅有单项选择题,提高组则有单项选择题与不定项选择题)、问题求解、阅读程序写结果及完善程序四大部分组成;但值得注意的是,今年提高组试囗题的分值设计与往年出现了较大的不同,除了选择题仍然是30分(15分单项+15分不定项),其余部分分值均发生了变化,其中问题求解由10分上升到15分,阅读程序由32分下降到28分,完善程序由28分下降到27分。

由于是第一年实行这种分值,目前暂时无法定言背后的含义,然而或许CCF在初赛更加重视选手的数学素质,而弱化了对于阅读程序能力的考察。

众所周知,阅读程序的能力并不能非常真实地反映选手的程序能力,并且纵观近几年的阅读程序题已没有了什么新意,这也可看做是一个“求新求变”的信号。

至于试囗题整体难度方面较上年有了明显下降,其中问题求解第一题可以看做是考察选手的语文水平,而阅读程序更是没有了以往的“死算”题(即给定若干常数,在程序中设置一系列运算过程,让选手进行阅读计算类型的题目),完善程序给定的源代码风格良好,第二题竟然还加上了注释,这不能不说就是一种降低难度的举动。

全国信息学奥林匹克联赛(NOIP2010)复赛_普及组_解题报告(pascal)

全国信息学奥林匹克联赛(NOIP2010)复赛_普及组_解题报告(pascal)

全国信息学奥林匹克联赛(NOIP2010)复赛_普及组_解题报告(pascal)全国信息学奥林匹克联赛(NOIP2010)复赛普及组解题报告1.数字统计(two.pas/c/cpp)【问题描述】请统计某个给定范围[L, R]的所有整数中,数字2 出现的次数。

比如给定范围[2, 22],数字2 在数2 中出现了1 次,在数12 中出现1 次,在数20 中出现1 次,在数21 中出现1 次,在数22 中出现2 次,所以数字2 在该范围内一共出现了6次。

【算法思路】枚举法,依次将L至R转化为字符串,查找当中有多少个”2”.【程序代码】program two;varl,r:1..10000;i,j,h,c:longint;s:string;beginassign(input,'two.in');assign(output,'two.out');reset(input);rewrite(output);readln(l,r);c:=0;for i:=l to r dobeginstr(i,s);h:=length(s);for j:=1 to h doif s[j]='2'then c:=c+1;end;writeln(c);close(input);close(output);end.2.接水问题(water.pas/c/cpp)【问题描述】学校里有一个水房,水房里一共装有m 个龙头可供同学们打开水,每个龙头每秒钟的供水量相等,均为1。

现在有n 名同学准备接水,他们的初始接水顺序已经确定。

将这些同学按接水顺序从1到n 编号,i号同学的接水量为w i。

接水开始时,1 到m 号同学各占一个水龙头,并同时打开水龙头接水。

当其中某名同学j 完成其接水量要求w j 后,下一名排队等候接水的同学k马上接替j 同学的位置开始接水。

这个换人的过程是瞬间完成的,且没有任何水的浪费。

NOIP2010第十六届初赛试题及答案

NOIP2010第十六届初赛试题及答案

NOIP2010第十六届初赛试题及答案(普及组Pascal)NOIP2010第十六届初赛试题及答案(普及组Pascal) PDF格式第十六届全国青少年信息学奥林匹克联赛初赛试题(普及组 Pascal 语言两小时完成)●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●一. 单项选择题(共20题,每题1.5分,共计30分。

每题有且仅有一个正确答案。

)1.2E+03表示()。

A.2.03B.5C.8D.20002.一个字节(byte)由()个二进制位组成。

A.8B.16C.32D.以上都有可能3.以下逻辑表达式的值恒为真的是()。

A.P∨(﹁P∧Q) ∨(﹁P∧﹁Q)B.Q∨(﹁P∧Q) ∨(P∧﹁Q)C. P∨Q∨(P∧﹁Q) ∨(﹁P∧Q)D.P∨﹁Q∨(P∧﹁Q) ∨(﹁P∧﹁Q)4.Linux下可执行文件的默认扩展名为()。

A.exeC.dllD.以是都不是5.如果树根算是第1层,那么一棵n层的二叉树最多有()结点。

A.2n-1B.2nC.2n+1D.2n+16.提出“存储程序”的计算机工作原理的是()。

A.克劳德·香农B.戈登·摩尔C.查尔斯·巴比奇D.冯·诺依曼7.设X、Y、Z分别代表三进制下的一位数字,若等式XY+ZX=XYX在三进制下成立,那么同样在三进制下,等式XY×ZX=()也成立。

A.YXZB.ZXYC.XYZD.XZY9.前缀表达式“+3×2+5 12”的值是()。

A.23B.25C.37D.6510.主存储器的存取速度比中央处理器(CPU)的工作速度慢得多,从而使得后者的效率受到影响。

而根据局部性原理,CPU所访问的存储单元通常都趋于聚集在一个较小的连续区域中。

于是,为了提高系统整体的执行效率,在CPU中引入了()。

A.寄存器B.高速缓存C.闪存D.外存11.一个字长为8位的整数的补码是11111001,则它的原码是()。

noip初赛试题普及组及答案

noip初赛试题普及组及答案

noip初赛试题普及组及答案一、选择题(每题5分,共20分)1. 在计算机中,用来表示存储容量的基本单位是()。

A. 字节B. 字C. 位D. 字长答案:A2. 下列关于算法复杂度的描述,正确的是()。

A. 算法复杂度与程序代码的长短有关B. 算法复杂度与程序的运行时间有关C. 算法复杂度与程序运行的输入数据有关D. 算法复杂度与程序运行的机器性能有关答案:C3. 在编程中,若要实现一个循环,直到满足某个条件才停止,应使用()。

A. while循环B. for循环C. do-while循环D. switch语句答案:A4. 在C++中,下列哪个关键字用于定义一个类()。

A. structB. classC. interface答案:B二、填空题(每题5分,共20分)1. 在计算机科学中,数据结构通常分为两大类:线性结构和________。

答案:非线性结构2. 一个完整的程序设计语言包括语法规则和________规则。

答案:语义3. 在计算机中,用二进制表示的数值中,最小的非零数是________。

答案:14. 在C++中,用于定义一个私有成员的关键字是________。

答案:private三、编程题(每题30分,共60分)1. 编写一个程序,计算并输出100以内所有偶数的和。

```c++#include <iostream>using namespace std;int main() {int sum = 0;for (int i = 1; i <= 100; i++) {if (i % 2 == 0) {sum += i;}}cout << "Sum of all even numbers within 100 is: " << sumreturn 0;}```2. 编写一个程序,实现一个简单的计算器,能够进行加、减、乘、除四则运算。

NOIP 2010普及组解题报告

NOIP 2010普及组解题报告
m2 = 0;
for (i = n ; i >= 1 ; i--)
{
if (d[i].j2r > m2) m2 = d[i].j2r;
tr = d[i - 1].j1r + m2;
if ( r > tr ) r = tr;
NOIP 2010普及组解题报告
关于2010年普及组考题:
没有想到,这次的题目和2008、2009年的题目完全风格两样,我不知道是不是出题老师发生了变化。但是,总体感觉,题目趋于容易,甚至没有涉及DP、搜索中的初级方法。但是,题目很多知识点又隐含颇多。不容易拿到完美的分数。感谢出题老师,给我们带来的这届优秀题目。
while (l < r && d[l].j1r <= t.j1r) l++;
d[r] = d[l];
}
d[r] = t;
qsort(s, r - 1);
qsort(r + 1, e);
}
然后就是逐渐退出和更新半径的过程了:
r = d[n].j1r;
{
t1 = t2 = 0;
for (j = 1 ; j <= n ; j++)
{
if (s[i][j] > t1) t1 = s[i][j];
if (t1 > t2) swap(t1, t2);
}
if (t < t1) t = t1;
}
最后r即为最小消耗。
四、三国游戏
从思想实现来说,还是一道枚举加贪心的题目。因为,“人”在和计算机斗争的过程中,双方都无法取得最大的默契配合值。所以,“人”只能够去考虑次大最优值,但是,为了能够骗过计算机,我们选择的,只能够是跟我们选择的第一位武将配合值次大的那位武将(如果不是一个的话也会被计算机破坏掉)。所以,就要求我们必须,找到,每行中次大值最大的那个值(挺扰人的)。当然,这个提法是建立在我们有了题目中展示的那个矩阵之后。你要注意,题目给你的值是这个矩阵的右半边,你需要把左半边的值自己不上,才能够按照行去枚举(当然,做完后,如果你想按照列,也没有关系,因为全都是对称的,对吧)。

NOIP2010普及组初赛试题+答案C++

NOIP2010普及组初赛试题+答案C++

第十六届全国青少年信息学奥林匹克联赛初赛试题(普及组C++语言两小时完成)●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●一、单项选择题(共20题,每题1.5分,共计30分。

每题有且仅有一个正确选项。

)1.2E+03表示()。

A.2.03 B.5 C.8 D.20002.一个字节(byte)由()个二进制位组成。

A.8 B.16 C.32 D.以上皆有可能3.以下逻辑表达式的值恒为真的是()。

A.PV(¬PΛQ)V(¬PΛQ) B.QV(¬PΛQ)V(PΛ¬Q)C.PVQV(PΛ¬Q)V(¬PΛQ) D.P V¬QV(PΛ¬Q)V(¬PΛ¬Q)4.Linux下可执行文件的扩展名为()。

A.exe B.com C.dll D.以上都不是5.如果树根算第1层,那么一棵n层的二叉树最多有()个结点。

A.2n-1 B.2n C.2n+1 D.2n+16.提出“存储程序”的计算机原理的是()。

A.克劳德·香农B.戈登·摩尔C.查尔斯·巴比奇D.冯·诺依曼17.设X、Y、Z分别代表三进制下的一位数字,若等式XY+ZX=XYX在三进制下成立,那么同样在三进制下,等式XY*ZX=( )也成立。

A.YXZ B.ZXY C.XYZ D.XZY8.Pascal语言、C语言和C++语言都属于()。

A.面向对象语言B.脚本语言C.解释性语言D.编译性语言9.前缀表达式“+3*2+5 12”的值是()。

A.23 B.25 C.37 D.6510.主存储器的存取速度比中央处理器(CPU)的工作速度慢得多,从而使得后者的效率受到影响。

而根据局部性原理,CPU所访问的存储单元通常都趋于聚集在一个较小的连续区域中。

于是,为了提高系统的整体执行效率,在CPU中引入()。

A.寄存器B.高速缓存C.闪存D.外存11.一个字长为8位的整数的补码是1111 1001,则它的原码是()。

NIOP2010普及高中题解

NIOP2010普及高中题解

至此,NOIP2010已经过去将近2个月了,随着保送的取消,我相信会有更多的人不会再参加了。

也不会有人对我8题的题解感兴趣了……但是,兴趣终归是兴趣,不会因为取消保送而放弃他的执着追求,下面,我做一下8题的总结。

普及组:一二两题很简单,直接模拟即可AC。

(但是第二题我只过了9个点,奇怪)。

程序如下:数字统计:#include"stdio.h"long l,r;long dfs(long x){long s=0;while(x!=0){if(x%10==2)s++;x/=10;}return s;}int main(){long s=0;scanf("%ld%ld",&l,&r);for(long i=l;i<=r;i++)s+=dfs(i);printf("%ld",s);getchar(),getchar();return 0;}接水问题:#include"stdio.h"long w[200]={0};long n,m;int main(){long x,ans=0,N;scanf("%ld%ld",&n,&m);for(long j=1;j<=m;j++){scanf("%ld",&x);w[j]=x;}N=n-m;while(N){long k=100000;for(long j=1;j<=m;j++){for(j=1;j<=m;j++)if(w[j]>0&&k>w[j])k=w[j];for(j=1;j<=m;j++){w[j]-=k;if(w[j]==0){if(N!=0){scanf("%ld",&x);N--;w[j]=x;}}}if(k!=100000)ans+=k;}}long k=0;for(long i=1;i<=m;i++)if(k<w[i])k=w[i];ans+=k;printf("%ld",ans);getchar(),getchar();return 0;}第三题,需要枚举加优化。

NOIP2010初赛普及组C++题目及参考答案

NOIP2010初赛普及组C++题目及参考答案

第十六届全国青少年信息学奥林匹克联赛初赛试题(普及组C++语言两小时完成)●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●一、单项选择题(共20题,每题1.5分,共计30分。

每题有且仅有一个正确选项。

)1.2E+03表示()。

A. 2.03B.5C.8D.200023A.PC.P4.5A.2n6A.7.设式8.A.910在CPUA.寄存器B.高速缓存C.闪存D.外存11.一个字长为8位的整数的补码是11111001,则它的原码是()。

A.00000111B.01111001C.11111001D.1000011112.基于比较的排序时间复杂度的下限是(),其中n表示待排序的元素个数。

A.Θ(n)B.Θ(nlogn)C.Θ(logn)D.Θ(n2)13.一个自然数在十进制下有n位,则它在二进制下的位数与()最接近。

A.5nB.n*log210C.10*log2nD.10n log2n14.在下列HTML语句中,可以正确产生一个指向NOI官方网站的超链接的是()。

A.<aurl="">欢迎访问NOI网站</a>B.<ahref="">欢迎访问NOI网站</a>C.<a></a>D.<aname="">欢迎访问NOI网站</a>15.元素R1、R2、R3、R4、R5入栈的顺序为R1、R2、R3、R4、R5。

如果第1个出栈的是R3,那么第5个出栈的不可能是()。

A.R1B.R2C.R4D.R516.双向链表中有两个指针域llink和rlink,分别指向该结点的前驱及后继。

设p指向链表中的一个结点,它的左右结点均非空。

现要求删除结点p,则下面语句序列中错误的是()。

A.p->rlink->llink=p->rlink;p->llink->rlink=p->llink;deletep;1718A.B.C.D.19置。

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

NOIP2010题解报告提高组No.1 机器翻译时间及空间复杂度题解时间复杂度:O(NM) 空间复杂度:O(M) 方法一:模拟整个机器翻译的过程,判断某一元素是否在当前内存中,可以采用顺序遍历整个内存的方式来处理。

预期分数100分时间复杂度:O(N) 空间复杂度:O(M) 方法二:如果将题目N、M的数据范围改成100000,那么方法一就会因超时而挂掉,这时我们可以根据题目中说每个数都不超过1000来优化算法,我们可以建立一个标记数组(hash表)来判断i是否在内存中。

预期分数100分时间复杂度:O(N) 空间复杂度:O(M) 方法三:如果将题目N、M的数据范围改成100000且每个数都不会超过maxlongint,那么方法二也同样会挂掉,我们可以继续改进算法,我们可以将每一个数都mod一个质数,然后根据这个质数建立链表(hash表)。

预期分数100分提高组No.2乌龟棋时间及空间复杂度题解时间复杂度:O(M!) 空间复杂度:O(N) 方法一:枚举每一张卡片的使用顺序,对于每一种顺序求的当前的解,保留最优解即可。

预期分数30分时间复杂度:O(NM^4) 空间复杂度:O(NM^4) 方法二:使用动态规划算法。

用f[I,j1,j2,j3,j4]表示前i个格子,用j1张1号卡片,j2张2号卡片,j3张3号卡片,j4张4号卡片所得到的最优值,则F[I,j1,j2,j3,j4]=A[i]+max{F[i-1,j1-1,j2,j3,j4], 当j1>0F[i-1,j1,j2-1,j3,j4], 当j2>0F[i-1,j1,j2,j3-1,j4], 当j3>0F[i-1,j1,j2,j3,j4-1]} 当j4>0边界条件f=-oo f[1,0,0,0,0]=0最后结果f[n,tot[1],tot[2],tot[3],tot[4]] tot[i]表示第i种棋的个数预期分数50分时间复杂度:O(NM^3) 空间复杂度:O(NM^3) 方法三:方法二在表达状态上有浪费,因为j4根据I,j1,j2,j3的关系就可以算出来,则现在的转移方程式变为F[I,j1,j2,j3]=A[i]+max{F[i-1,j1-1,j2,j3], 当j1>0F[i-1,j1,j2-1,j3], 当j2>0F[i-1,j1,j2,j3-1], 当j3>0F[i-1,j1,j2,j3]} 当(i-j1-2*j2-3*j3) div 4<=tot[4] 边界条件f=-oo f[1,0,0,0]=0最后结果f[I,j1,j2,j3]预期分数100分时间复杂度:O(M^4) 空间复杂度:O(M^4) 方法四:方法三在表达状态上依然有浪费,因为i可以通过j1,j2,j3,j4的关系算出来,而i>=j4,这样我们就得到了比方法三更优的算法用f[j1,j2,j3,j4]表示已经使用了j1张1号卡片,j2张2号卡片,j3张3号卡片,j4张4号卡片,所得到的最优质,则F[j1,j2,j3,j4]=A[1+j1+j2*2+j3*3+j4*4]+max{F[j1-1,j2,j3,j4], 当j1>0F[j1,j2-1,j3,j4], 当j2>0F[j1,j2,j3-1,j4], 当j3>0F[j1,j2,j3,j4-1]} 当j4>0边界条件f=-oo f[0,0,0,0]=a[1]最后结果f[tot[1],tot[2],tot[3],tot[4]]预期分数100分提高组No.3 关押罪犯时间及空间复杂度题解时间复杂度:O(2^N) 空间复杂度:O(N^2) 方法一:枚举每一个人是在第一个监狱或第二个监狱,用邻接矩阵来存图,找到每一种情况的解,保留最优解即可。

预计分数30分时间复杂度:O(Mlog(10^9))空间复杂度:O(M) 方法二:由于M过大,且为稀疏图,这样我们可以采用链表的方式去存储。

如果直接求解不好求,那么我们可以尝试去判断一个解是否成立。

这个过程与猜数游戏非常类似,如果猜大了,那么你就往高猜,如果猜小了,那么你就往低猜,这样每次分段的时间复杂度为O(log(N)),判断是否为解需要O(1),故总时间复杂度为O(log(N))。

对应到这个题目,如果我们判断一个解的时间复杂度比较低的话,就可以采用二分答案的方式。

判断一个解是否成立,我们可以判断哪些人不能和这个人分成一组,既判断这个图是否为二分图,我们可以采用染色的方式,1号犯人颜色为1,则如果连接1号犯人的人边权大于我们猜到的值,则这个犯人颜色为2,反之颜色为1,对于其他犯人也做类似处理。

如果在这个过程中没有发生冲突(指本次需要染一种颜色,但是这个犯人本身已经有另一种颜色的情况),则表明猜数猜小了,反之为猜大了或猜中了。

预期分数100分时间复杂度:O(MlogM) 空间复杂度:O(M) 方法三:本题虽然可以二分去做,但是是经典的2-sat问题,所有的点分成两个集合。

把每一个点拆成0和1 两个点,如果有边相连接,则a0与b1相连,a1与b0相连,b0和a1相连,b1与a0相连。

我们按照边权从大到小排序,依次插入,如果出现了环(a0与a1相连),则出现了矛盾。

上述过程可以使用并查集去维护。

预期分数100分提高组No.4 引水入城时间及空间复杂度题解时间复杂度:O(NM) 空间复杂度:O(NM) 方法一:只考虑无解的情况,将每一个(1,i)作为起点,进行Flood Fill,如果(n,i)有遍历不到的情况,则直接输出答案。

预期分数30分时间复杂度:O(NM) 空间复杂度:O(NM) 方法二:只考虑无解和N=1时的情况。

对于N=1时,我们可以用排序求出第i大海拔高度的位置,按照海拔高度从大到小的数进行处理,如果当前节点还没有被访问,则这个节点向左和向右扩展,直到全部节点都被访问时,输出解。

这样的贪心策略一定是正确的,因为如果海拔高度高的节点能遍历到海拔高度低的节点,那么这个海拔高度低的能遍历到新的节点海拔高度高的节点也一定能遍历到。

在结合方法一,预期分数40分时间复杂度:O(2^M) 空间复杂度:O(NM) 方法三:只考虑无解、N=1、M<=20的情况。

对于M<=20,因为一定有解,我们可以枚举子集的办法将所有情况列出来,对于每种情况进行一次Flood Fill,取最优解即可。

预期分数60分时间复杂度:O(NM^2) 空间复杂度:O(NM) 方法四:首先需要用到一个结论,如果(1,i)能遍历到(n,i)的某些点,那么这个区间一定是连续的。

用反证法,对于其逆命题,如果这个区间不是连续的,假设现在分成两段。

如下图,从红色节点出发,到达最后一行的区间会被紫色节点(表示不可到达)所分成两段由于一定可以由第一行的节点访问到紫色节点,那么这个节点访问到紫色节点的路径中一定会包含红色节点所遍历到的路径(图中的绿色路径),从而证明了假设不成立,则原命题成立。

下面我们可以将问题分成两个部分:1.求(1,i)的某个节点能控制到(n,i)的区间[st[i],ed[i]]2.使用最少的区间使整个线段遍历对于第一问,我们只需要枚举每一个第一行的点做一次Flood Fill 即可。

时间复杂度为O(NMM)对于第二问,可以使用动态规划的方法来做,设f[i]覆盖前i段,需要最少的几个区间,则转移方程为F[i]=min(st[i]-1) 当st[i]<=i<=ed[i]边界条件f=-oo f[0]=0;最终答案f[m]时间复杂度为O(NM)预期分数90-100分时间复杂度:O(NM) 空间复杂度:O(NM) 方法五:对于方法四,我们可以继续优化求(1,i)的某个节点能控制到(n,i)的区间[st[i],ed[i]],如果从第一行求不方便,我们就可以从最后一行开始求,由于st[i]和ed[i]求的方法类似,在这里只介绍st[i]的求法。

按照(n,1)到(n,m)的顺序进行Flood Fill(注意这里遍历条件和第一行往第N行的条件相反),将遍历到的节点标记,以后遇到这个节点直接break,如果能遍历到第1行的某个节点,则st[i]就为起点(n,i)的i值。

这样做的原因是,如果(n,i)为起点是第一个遍历到(1,k),则st[K]=i一定是最小的。

这样在最坏情况下每一个节点仅会被访问一次,所以时间复杂度为O(NM)。

预期分数100分普及组No.1数字统计时间及空间复杂度题解时间复杂度:O(N) 空间复杂度:O(1) 方法一:直接用一个循环枚举l到r的所有数,对每一个数字进行判断(判断的方式有:转成字符串,一直mod 10等方法求的2的出现次数)。

预期分数100分时间复杂度:O(1) 空间复杂度:O(1) 方法二:如果数据范围改成<=10^10,那么方法一必然超时。

采用动态规划的算法,用f[i]表示0到10^i-1中出现2的次数,则F[i]=1 当i=1时F[i]=f[i-1]*10+10^(i-1) 当i>1时因为ans=count(r)-count(l-1) count(k)表示1-k之间出现2的次数和下面模拟count(3292)时的情况:把千位为3分成三种情况:1.千位为0,1(0相当于没有千位) f[3]+f[3]2.千位为2 f[3]+10003.千位为3 继续算292时的情况把百位为2分成三种情况:1.百位为0,1 f[2]+f[2]2.百位为2 92+1+继续算92的情况……全部累加以来即count的值预期分数100分(相关加强版在tyvj-P1409)普及组No.2 接水问题时间及空间复杂度题解时间复杂度:O(不好估计)空间复杂度:O(N) 方法一:按照时间来模拟,每次将时间加1,如果有同学的水加满后,则让下一个未接水的同学过来接水。

预期分数100分时间复杂度:O(NlogM) 空间复杂度:O(N) 方法二:其实我们仅需要关注换人的一瞬间,其他时间没有任何意义。

我们用a[i]表示第i个水龙头需要放水的量,则初始情况a[i]=w[i](i∈m),每次换人的时候,肯定是a[i]最小的那个水龙头(因为需要放的水最小,所需要的时间就最小),将这个a[i]加上下一个需要接水的同学的时间,最终找到最大的a[i]既是本题的解。

于是本题变成了一个RMQ(求区间最大最小值)的问题,可以采用线段树、堆、ST算法等。

预期分数100分(相关加强版本在tyvj-P1405)普及组No.3导弹拦截时间及空间复杂度题解时间复杂度:O(1) 空间复杂度:O(1) 方法一:仅考虑N=1的情况,只需要判断距离哪一个拦截导弹系统近即可。

预期分数10分时间复杂度:O(2^N) 空间复杂度:O(N) 方法二:仅考虑N<=2的情况,枚举哪一些被1号系统拦截,另外的被2号系统拦截。

相关文档
最新文档