NOIP2014普及组复赛试题解答2
NOIP(2014)第二十届全国青少年信息学奥林匹克联赛初赛(普及组试题及答案).
第二十届全国青少年信息学奥林匹克联赛初赛(普及组 Pascal语言二小时完成)●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●一.单项选择题(共20题,每题1.5分,共计30分。
每题有且仅有一个正确答案。
)1、以下哪个是面向对象的高级语言()。
A. 汇编语言B. C++C. FortranD. Basic2、1TB代表的字节数量是()。
A.2的10次方B. 2的20次方C. 2的30次方D. 2的40次方3、二进制数00100100和00010101的和是。
A.00101000B.001010100C.01000101D.001110014、以下哪一种设备属于输出设备()A.扫描仪B.键盘C.鼠标D.打印机5、下列对操作系统功能的描述最为完整的是()A.负责外设与主机之间的信息交换B.负责诊断机器的故障C.控制和管理计算机系统的各种硬件和软件资源的使用D.将源程序编译成目标程序6.CPU、存储器、I/O设备是通过()连接起来的。
A. 接口B.总线C.控制线D.系统文件7、断电后会丢失数据的存储器是()。
A.RAMB.ROMC.硬盘D.光盘8、以下哪一种是属于电子邮件收发的协议()。
A.SMTPB.UDPC.P2PD.FTP9、下列选项中不属于图像格式的是()A.JPG格式B. TXT格式C.GIF格式D.PNG格式10.链表不具有的特点是()A.不必事先估计存储空间 B.可随机访问任一元素C.插入删除不需要移动元素 D.所需空间与线性表长度成正比11、下列各无符号十进制整数中,能用八位二进制表示的数中最大的是()。
A.296 B.133 C.256 D.19912.下列几个32位IP地址中,书写错误的是()。
A.162.105.130.27B.192.168.0.1C.256.256.129.1D.10.0.0.113.要求以下程序的功能是计算:s=1+1/2+1/3+……+1/10。
信息学奥赛NOIP普及组历届试题分析
二、模拟类试题
有些问题,我们很难建立数学模型,或者很难 用计算机建立递推、递归、枚举、回溯法等算 法。在这种情况下,一般采用模拟策略。
所谓模拟策略就是模拟某个过程,通过改变数 学模型的各种参数,进而观察变更这些参数所 引起过程状态的变化,由此展开算法设计。
金币 (noip2015普及组第一题)
输入样例:
70 3 71 100
69 1 12
输出样例:
3
(1 <= T <= 1000) (1 <= M <= 100)
采药 (noip2005普及组第三题)
题目大意:共m株草药,每株草药有一个价值 和采摘的时间,问t时间能采摘到的草药的最大 价值。
采药 (noip2005普及组第三题)
输入格式:
第一行有两个整数T和M,T代表总共能够用来采药的时间,M 代表山洞里的草药的数目。接下来的M行每行包括两个在1到 100之间(包括1和100)的整数,分别表示采摘某株草药的时 间和这株草药的价值。
输出格式:
一行只包含一个整数,表示在规定的时间内,可以采到的草药 的最大总价值。
螺旋方阵试题分析
本题首先让我们想到传统的模拟,从[1,1]开 始往数组中填充数字,但对于[30000,30000] 的数组,直接爆零。
对于读入的n, x, y,先判断(x,y)在第几圈, 再模拟圈内的数字。
螺旋方阵试题分析
如:n=4, (2,2)在第2圈,(3,1)在第1圈。 n=6,(4,5)在第2圈
移动;如果前方是未曾经过的格子,则继续前进, 否则右转;重复上述操作直至经过矩阵中所有格子。 根据经过顺序,在格子中依次填入1,2,3,....,便构 成了一个螺旋矩阵。 现给出矩阵大小n以及i和j,请你求出该矩阵中第 i行第j列的数是多少。 下图是一个n=4时的螺旋矩阵。
noip普及组复赛试题及答案
noip普及组复赛试题及答案一、选择题1. 在计算机科学中,以下哪个概念与数据结构最相关?A. 算法B. 操作系统C. 网络协议D. 编译原理答案:A2. 以下哪种排序算法的时间复杂度为O(n^2)?A. 快速排序B. 归并排序C. 堆排序D. 冒泡排序答案:D3. 在C++中,以下哪个关键字用于定义类?A. structB. unionC. enumD. typedef答案:A4. 以下哪个选项不是数据库管理系统(DBMS)的特性?A. 数据持久性B. 数据共享C. 数据加密D. 数据独立性答案:C5. 在计算机网络中,TCP和UDP协议分别属于哪一层?A. 传输层B. 应用层C. 网络层D. 物理层答案:A二、填空题1. 在计算机程序中,______ 用于定义数据的存储方式和组织形式。
答案:数据结构2. 一个算法的时间复杂度为O(1),表示该算法的执行时间与输入数据的规模______。
答案:无关3. 在C++中,______ 是一种特殊的类,它提供了一种方式来定义数据类型。
答案:typedef4. 数据库管理系统(DBMS)通常包含数据定义语言(DDL)、数据操纵语言(DML)和______。
答案:数据控制语言(DCL)5. 在计算机网络中,______ 协议负责在网络层进行数据包的路由选择。
答案:IP三、简答题1. 请简述面向对象编程(OOP)的三个基本特征。
答案:封装、继承、多态2. 描述二分查找算法的基本步骤。
答案:二分查找算法的基本步骤包括:首先确定数组是有序的,然后取中间元素与目标值比较,如果中间元素等于目标值,则查找成功;如果目标值小于中间元素,则在左半部分继续查找;如果目标值大于中间元素,则在右半部分继续查找,直到找到目标值或查找范围为空。
四、编程题1. 编写一个函数,实现对整数数组的排序。
答案:以下是一个简单的冒泡排序算法实现:```cppvoid bubbleSort(int arr[], int n) {for (int i = 0; i < n-1; i++) {for (int j = 0; j < n-i-1; j++) {if (arr[j] > arr[j+1]) {swap(arr[j], arr[j+1]);}}}}```2. 编写一个函数,实现计算一个整数的阶乘。
noip2014普及组初赛试题+答案
NOIP 2014 第二十届全国青少年信息学奥林匹克联赛初赛普及组C++语言试题竞赛时间:2014 年10月11日14:30〜16:30选手注意:1、 试题纸共有 5页,答题纸共有 2页,满分100分。
请在答题纸上作答,写在试题 纸上的一律无效。
2、 不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。
A.负责外设与主机之间的信息交换B.负责诊断机器的故障C.控制和管理计算机系统的各种硬件和软件资源的使用D.将没有程序编译成目标程序6. CPU 、存储器、 A.接口 B.总线 C.控制线7•断电后会丢失数据的存储器是 A.RAM B.ROM C.硬盘8•以下哪一种是属于电子邮件收发的协议12•下列几个32位IP 地址中,书写错误的是 ( )。
A.162.105.135.27B.192.168.0.1C.256.256.129.1 13•要求以下程序的功能是计算: s=1+1/2+1/3+...+1/10 #in elude <iostream>一、单项选择题(共20题,每题1.51.以下哪个是面向对象的高级语言(A.汇编语言B.C++C.Fortran2. 1TB 代表的字节数是()。
A.2的10次方 B.2的20次方分,共计 )。
D.Basic30分;每题有且仅有一个正确选项 )C.2 的 30 的和是( A.00101000B.001010100C.010001014•以下哪一种设备属于输出设备( )。
A.扫描仪B.键盘C.鼠标D.打印机5•下列对操作系统功能的描述最为完整的是 ( 次方 D.2的40次方)。
D.00111001I/O 设备是通过()连接起来的。
D.系统文件 (A.SMT PB.UD PC.P2PD.FT P9•下列选项中不属于图像格式的是(A.JPEG 格式B.TXT 格式C.GIF 10.链表不具有的特点是( A.不必事物估计存储空间 C.插入删除不需要移动元素11•下列各无符号十进制整数中,A.296B.133C.256 )。
noip2014普及组复赛题解
1.珠心算测验注意看清题意:其中有多少个数,恰好等于集合中另外两个(不同的)数之和。
这样的题意加上100的规模,建议暴力3个for:#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>using namespace std;int n;int a[105];int main(){freopen("count.in","r",stdin);freopen("count.out","w",stdout);scanf("%d",&n);for(int i=1; i<=n; i++){scanf("%d",&a[i]);}sort(a+1,a+n+1);int res=0;for(int i=1; i<=n; i++){int ok=0;for(int j=1; j<=n && !ok; j++) if(j!=i){for(int k=1; k<=n && !ok; k++) if(a[k]!=a[j]){if(a[j]+a[k]==a[i]) ok=1;}}res+=ok;}printf("%d\n",res);return 0;}2.比例简化L很小,还是枚举,然后比较的话建议用乘法比较,避免精度问题:#include<cstdio>#include<cstring>#include<iostream>using namespace std;int A,B,L;int gcd(int a,int b){if(b==0) return a;return gcd(b,a%b);}int main(){freopen("ratio.in","r",stdin);freopen("ratio.out","w",stdout);scanf("%d%d%d",&A,&B,&L);int ba=1000000,bb=1;for(int i=1; i<=L; i++){for(int j=1; j<=L; j++){if(gcd(i,j)==1 && i*B>=j*A){if(ba*j>=bb*i){ba=i, bb=j;}}}}printf("%d %d\n",ba,bb);return 0;}3.螺旋矩阵没一圈的数量有规律的,最外面一圈(n-1)*4,然后每往里n-2,直到后要么只有一个点,要么4个点。
NOIP2014 普及组 解题报告
f[i,j]:=min{f[i-1,k]+|a[j]-a[k]|} (i≤k<j)
这里,f 是状态数组,a 储存原始序列。注意,所有的加数都在 min 的大括号中。这是一个时间 复杂度为 O(n3)的二维 DP。有了这个方程,我们再回到原问题。思考以后发现,要想直接把这个方 程升级到二维是十分困难的。注意到“1≤n,m≤16”这个数据范围,想到,可不可以一半搜索一半 DP 呢?答案是肯定的。我们可以任选行或列进行搜索(以搜索行为例),每次穷搜到的结果是一个有 r 个元素的行标序列。接下来,对于每一列 j,我们就可以将 a[ik,j](k 表示所有当前被搜中的行) 作为一个整体。对于在一维序列中的代价“|a[j]-a[k]|”,在二维矩阵中可以把它分解为上下两 个元素的“纵差”和左右两个元素的“横差”,在每次 DP 之前进行初始化。这样就把二维矩阵压缩 成了一维序列,可以应用刚才的状态转移方程了——当然还要变换一下:
assign(output,'count.out'); rewrite(output); readln(n); for i:=1 to n do read(a[i]); fillchar(b,sizeof(b),false); for i:=1 to n-1 do for j:=i+1 to n do b[a[i]+a[j]]:=true; ans:=0; for i:=1 to n do if b[a[i]] then inc(ans); writeln(ans); close(input); close(output) End.
-代码见下页-
第 4 页 共 13 页
NOIP2014 普及组 解题报告
By yearwhk
【参考代码】
2014noip复赛模拟练习2(答案)
1.某监狱里有个很长的走廊,走廊中一个接一个地有N个房间。
每个房间中锁着一个犯人。
一天夜里,狱警决定玩一个无聊游戏。
第1轮中,他喝了一口威士忌,然后打开每个房间。
第2轮,他喝了一口威士忌,然后按2的倍数遍历每个房间。
第3轮,他又喝了一口威士忌,然后遍历所有3的倍数的房间。
依次类推。
在遍历中,如果房间是锁着的,则打开;否则锁上。
他这样重复N轮,最终醉酒。
这时有些囚犯看到自己房间的锁被打开了,他们立即逃跑。
对于有N个房间的走廊,最终会有多少囚犯逃脱?输入:输入数据的第一行中有一个整数,表示有多少组测试数据。
接下来的若干行每行包含一个值为5-100的整数,这是房间的数目。
输出:对应输入数据输出多行,每行一个整数,表示逃脱的囚犯数量。
样例输入:25100样例输出:210var n,num,s,m,i,k,j:integer;a:array[0..200]of boolean;begin readln(num);for i:=1 to num dobegin readln(n);fillchar(a,sizeof(a),true);for j:=1 to n dofor k:=1 to n doif k mod j=0 then a[k]:=not a[k];s:=0;for j:=1 to n doif a[j]=false then inc(s);writeln(s);end;end. 输入3 10 35 50输出3 5 7输入3 22 68 99 输出 4 8 9输入5 10 30 60 85 100 输出 3 5 7 9 10一个自然数,若它的素因数至少是两重的(相同的素因数至少个数为二个,如:24=2*2*2*3,则称该数为“漂亮数”。
若相邻的两个自然数都是“漂亮数”,就称它们为“孪生漂亮数”,例如8和9就是一对“孪生漂亮数”。
输入X,Y,编程找出[X,Y]之间的所有“孪生漂亮数”。
如输入2 25,则输出8 924 25var i,n,a,t,x,y,s:longint; f :boolean;begin readln(x,y);a:=x;repeata:=a+1;n:=a;f:=false; i:= 2 ;while n >= i do begint:=0;while n mod i = 0 do begint:=t+1;n := n div i;end;if t>=2 then f:=true;i := i+1;end;if f then beginn:=a+1;f:=false; i:= 2 ;while n >= i do begint:=0;while n mod i = 0 do begint:=t+1;n := n div i;end;if t>=2 then f:=true;i := i+1;end; end;if f then begin s:=s+1; writeln(a,’‘,a+1);end;until a=y;readln;end.输入50 120输出63 64 75 76 80 81 98 99 99 100 116 117 120 121 输入354 480 输出360 361 363 364 368 369 。
NOIP2014普及组复赛试题
1. 珠心算测验【问题描述】 珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。
珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及。
某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。
他随机生成一个正整数集合,集合中的数各不相同,然后要求学生回答:其中有多少个数,恰好等于集合中另外两个(不同的)数之和? 最近老师出了一些测验题,请你帮忙求出答案。
【输入】输入文件名为count.in 。
输入共两行,第一行包含一个整数n ,表示测试题中给出的正整数个数。
第二行有n 个正整数,每两个正整数之间用一个空格隔开,表示测试题中给出的正整数。
【输出】输出文件名为count.out 。
输出共一行,包含一个整数,表示测验题答案。
【输入输出样例】 count.in count.out 4 1 2 3 42【样例说明】由1+2=3,1+3=4,故满足测试要求的答案为2。
注意,加数和被加数必须是集合中的两个不同的数。
【数据说明】对于100%的数据,3 ≤ n ≤ 100,测验题给出的正整数大小不超过10,000。
2.比例简化【问题描述】在社交媒体上,经常会看到针对某一个观点同意与否的民意调查以及结果。
例如,对某一观点表示支持的有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的值尽可能小。
【输入】输入文件名为ratio.in。
2014noip普及组复赛测试(答案)
老师给笑笑布置了一份作业,笑笑不知如何解决。
老师给了一串很长的数列,要求从中找出连续的一段来使的总和最大。
【输入文件】:第一行包含一个整数n,表示数列的长度。
(n<=100000)第二行包含n个整数来描述这个数列,每个整数的的绝对值不超过1000。
【文件输出】:文件中只有一个整数,为最大的连续段总和。
【输入样例】:51 -23 1 -4【输出样例】4vars:array[1..10000] of longint;n,ii,t,ans:longint;beginreadln(n);for i:=1 to n doread(s[i]);t:=s[1];ans:=s[1];for i:=2 to n dobeginif t<0 then t:=s[i] else t:=t+s[i];if t>ans then ans:=t;end;writeln(ans);end.输入61 5 4 -2 63 输出17输入1024 -12 9 11 7 20 -8 15 3 18 输出87输入710 8 9 -5 12 6 11 输出51输入205 12 19 20 -7 -6 18 22 19 8 11 33 15 32 17 -30 4 14 24 -13输出230【问题描述】鲁宾逊先生有一只宠物猴,名叫多多。
这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!——熊字”。
鲁宾逊先生和多多都很开心,因为花生正是他们的最爱。
在告示牌背后,路边真的有一块花生田,花生植株整齐地排列成矩形网格(如图1)。
有经验的多多一眼就能看出,每棵花生植株下的花生有多少。
为了训练多多的算术,鲁宾逊先生说:“你先找出花生最多的植株,去采摘它的花生;然后再找出剩下的植株里花生最多的,去采摘它的花生;依此类推,不过你一定要在我限定的时间内回到路边。
”我们假定多多在每个单位时间内,可以做下列四件事情中的一件:1)从路边跳到最靠近路边(即第一行)的某棵花生植株;2)从一棵植株跳到前后左右与之相邻的另一棵植株;3)采摘一棵植株下的花生;4)从最靠近路边(即第一行)的某棵花生植株跳回路边。
NOIP2014普及组复赛解题报告
Prolem 1 珠心算测试(count)这道题其实很简单,意思就是说给你一些数a1,a2,a3,a4...a n,然后让你回答有多少个A+B=C(A ≠ B ≠ C)满足(回答C的数量,而不是等式的数量)方法一那么有一种很明显的做法就是三层循环枚举C、A、B,注意:C是在最外层,若找到了一个A和一个B,满足上述等式,则C是一个符合要求的解,这时ans++,并且退出当前枚举,枚举下一个C,这种算法的时间复杂度是O(N3)而我当时没想到这个算法,因为有更好用而且简单更不容易出错的解法,方法二两重循环,分别枚举i=1...n,j=i+1...n,如果ai+aj这个数在集合中存在,那么you[a i+a j]←true,然后再从a1到a n做一次扫描,只要you[a i],ans++这个算法的好处在于它很好写,不用退出什么的,也不用注意循环的顺序,而且时间复杂度是O(N2)代码(方法2):在此征求一下大神的意见,如有更快的做法,敬请奉上小结:这道题很简单,但很多人没有做对的原因就是没有好好理解题意,但是根本原因其实还在于心态太骄傲了,认为是第一题就可以轻视,这样是不好的,水题我们更要做好啊,你想想同样是100分,这100分多么好拿,所以是水题、越该放平心态,细心地做。
当时我正是由于重视(2013年第一题爆零的教训),用了整整15分钟才做好,最后得了100分Problem 2 比例简化这道题目是说,给定A和B,求解一组A’和B’,满足以下条件:A′B′−AB≥00<A′,B′≤LA′和B′互质首先,想一个总体的框架:我们发现L≤100,因此可以枚举A′和B′,然后判断是否A’B’满足上述条件,并且打擂台求比值最小的一组就行了,打擂台的复杂度是O(1)。
设验证的复杂度为O(k),则总的算法的复杂度为O(kL2),其中L2是104,所以我们只要保证k的大小在100以内就一定没有问题。
现在要求两个分数的差值,该怎么办呢?高精除!很多人一下就想到了,当时我在赛场上就是这么想的,但是又仔细一考虑。
学科竞赛-NOIP2014提高组复赛试题_2
NOIP2014提高组复赛试题全国信息学奥林匹克联赛(2014)复赛提高组11.生活大爆炸版石头剪刀布()【问题描述】石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。
如果两个人出拳一样,则不分胜负。
在《生活大爆炸》第二季第8集中出现了一种石头剪刀布的升级版游戏。
升级版游戏在传统的石头剪刀布游戏的基础上,增加了两个新手势:斯波克:《星际迷航》主角之一。
蜥蜴人:《星际迷航》中的反面角色。
这五种手势的胜负关系如表一所示,表中列出的是甲对乙的游戏结果。
表一石头剪刀布升级版胜负关系剪刀石头布蜥蜴人斯波克甲对乙的甲'结果剪刀平输赢赢输石头平输赢输布平输赢蜥蜴人平赢斯波克平现在,小A和小B尝试玩这种升级版的猜拳游戏。
已知他们的出拳都是有周期性规律的,但周期长度不一定相等。
例如:如果小A以“石头-布-石头-剪刀-蜥蜴人-斯波克”长度为6的周期出拳,那么他的出拳序列就是“石头-布-石头-剪刀-蜥蜴人-斯波克-石头-布-石头-剪刀-蜥蜴人-斯波克-……”,而如果小B 以“剪刀-石头-布-斯波克-蜥蜴人”长度为5的周期出拳,那么他出拳的序列就是“剪刀-石头-布-斯波克-蜥蜴人-剪刀-石头-布-斯波克-蜥蜴人-……”已知小A和小B一共进行N次猜拳。
每一次赢的人得1分,输的得0 分;平局两人都得0 分。
现请你统计N 次猜拳结束之后两人的得分。
【输入】输入文件名为。
第一行包含三个整数:N,,,分别表示共进行N次猜拳、小A出拳的周期长度,小B出拳的周期长度。
数与数之间以一个空格分隔。
第二行包含个整数,表示小A出拳的规律,第三行包含个整数,表示小B出拳的规律。
其中,0表示“剪刀” ,1表示“石头”, 2表示“布”,3 表示“蜥蜴人” ,4 表示“斯波克”。
数与数之间以一个空格分隔。
【输出】输出文件名为。
输出一行,包含两个整数,以一个空格分隔,分别表示小A、小B的得分。
【输入输出样例1】【输入输出样例2】【数据说明】对于100%勺数据,0 2.联合权值()【问题描述】无向连通图G有n个点,1条边。
NOIP2014(第二十届)初赛普及组C语言试题及答案
第二十届全国青少年信息学奥林匹克联赛初赛普及组C语言试题竞赛时间:2014年10月12日14:30~16:30选手注意:试题纸共有8页,答题纸共有2页,满分100分。
请在答题纸上作答,写在试题纸上的一律无效。
不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。
一、单项选择题(共20题,每题1.5分,共计30分;每题有且仅有一个正确选项)1. 以下哪个是面向对象的高级语言()。
A. 汇编语言B. C++C. FortranD. Basic2. 1TB代表的字节数量是()。
A. 2的10次方B. 2的20次方C. 2的30次方D. 2的40次方3. 二进制数00100100和00010101的和是()。
A. 00101000B. 001010100C. 01000101D. 001110014. 以下哪一种设备属于输出设备()。
A. 扫描仪B. 键盘C. 鼠标D. 打印机5. 下列对操作系统功能的描述最为完整的是()。
A. 负责外设与主机之间的信息交换B. 负责诊断机器的故障C. 控制和管理计算机系统的各种硬件和软件资源的使用D. 将源程序编译成目标程序6. CPU、存储器、I/O设备是通过()连接起来的。
A. 接口B. 总线C. 控制线D. 系统文件7. 断电后会丢失数据的存储器是()。
A.RAMB. ROMC. 硬盘D. 光盘8. 以下哪一种是属于电子邮件收发的协议()。
A. SMTPB. UDPC. P2PD. FTP9. 下列选项中不属于图像格式的是()。
A. JPEG格式B. TXT格式C. GIF格式D. PNG格式10. 链表不具有的特点是()。
A. 不必事先估计存储空间B. 可随机访问任一元素C. 插入删除不需要移动元素D. 所需空间与线性表长度成正比11. 下列各无符号十进制整数中,能用八位二进制表示的数中最大的是()。
A. 296B. 133C. 256D. 19912. 下列几个32位IP地址中,书写错误的是()。
noip2014普云组初赛试题+答案
NOIP2014第二十届全国青少年信息学奥林匹克联赛初赛普及组 C++ 语言试题竞赛时间: 2014年10月11日14:30~16:30选手注意:1 、试题纸共有 5 页,答题纸共有2 页,满分 100 分。
请在答题纸上作答,写在试题纸上的一律无效。
2、不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。
一、单项选择题( 共 20 题,每题 1.5⒈以下哪个是面向对象的高级语言(A. 汇编语言B.C++C.Fortran⒉ 1TB 代表的字节数是() 。
分,共计) 。
D.Basic30 分;每题有且仅有一个正确选项)A.2 的 10⒊二进制数次方 B.200100100的和20 次方00010101C.2 的 30的和是 (次方 D.2 ) 。
的40次方A.00101000B.001010100C.01000101D.00111001⒋以下哪一种设备属于输出设备() 。
A. 扫描仪B. 键盘C. 鼠标D. 打印机⒌下列对操作系统功能的描述最为完整的是() 。
A. 负责外设与主机之间的信息交换B. 负责诊断机器的故障C. 控制和管理计算机系统的各种硬件和软件资源的使用D. 将没有程序编译成目标程序⒍ CPU 、存储器、 I/O设备是通过() 连接起来的。
A. 接口B. 总线C. 控制线D. 系统文件⒎断电后会丢失数据的存储器是() 。
A.RAMB.ROMC. 硬盘D. 光盘⒏以下哪一种是属于电子邮件收发的协议() 。
A.SMTPB.UDPC.P2PD.FTP⒐下列选项中不属于图像格式的是A.JPEG 格式B.TXT 格式(C.GIF) 。
格式 D.PNG格式⒑链表不具有的特点是() 。
A. 不必事物估计存储空间 C. 插入删除不需要移动元素B. 可随机访问任一元素D. 所需空间与线性表长度成正比⒒下列各无符号十进制整数中,能用八位二进制表示的数中最大的是() 。
A.296B.133C.256D.199⒓下列几个32 位IP地址中,书写错误的是() 。
NOIP2014普及组复赛试题讲解(c++版本)
确定解题思路AC
思路:搜索+DP 枚举出选那些行 算出j列各行之间的分数w[j],k,j两列之间的分数v[k][j]。 f[i][j]表示已经选了i(数量)列,最后一列是j (下标)的最小分数 且第i列是j 状态转移方程:f[i][j]=min(f[i-1][k]+w[j]+v[k][j])。
-6-
第3题 “ 螺旋矩阵”简述
一个n行n列的螺旋矩阵可由如下方法生成: 从矩阵的左上角(第1行第1列)出发,初始时向右移动; 如果前方是未曾经过的格子,则继续前进,否则右转;重 复上述操作直至经过矩阵中所有格子。根据经过顺序,在 格子中依次填入1, 2, 3, ... , n2,便构成了一个螺旋矩阵。 下图是一个n = 4 时的螺旋矩阵。
- 14 -
暴力搜索程序模块
int main() { cin>>n>>m>>row>>col; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>a[i][j]; w(1); cout<<ans; return 0; }
- 18 -
试题分析
BYE
温馨提示:
本题解内的程序都已经AC,由
于代码较长,可以查看CPP文件
The END
2017. 07. 28
试题分析
NOIP2014 普及组复赛题解
NOIP2014普及组C++
2017. 07. 28
第1题 “珠心算测验”简述
某学校的珠心算老师采用一种快速考察珠心算加法 能力的测验方法。他随机生成一个正整数集合,集 合中的数各不相同,然后要求学生回答:其中有多 少个数,恰好等于集合中另外两个(不同的)数之 和?
NOIP2014普及组复赛试题 螺旋矩阵
NOIP2014普及组复赛试题解答3. 螺旋矩阵【问题描述】一个n 行n列的螺旋矩阵可由如下方法生成:从矩阵的左上角(第1行第1列)出发,初始时向右移动:如果前方是未曾经过的格子,则继续前进,否则右转;重复上述操作直至经过矩阵中所有格子。
根据经过顺序,在格子中依次填入1,2,3,…,n2,便构成了一个螺旋矩阵。
现给出矩阵大小n以及i和j,请你求出该矩阵中第i行第j列的数是多少。
【分析】这是个蛇形填数问题。
如果采用先枚举二维数组再找对应的元素方法,由于1 ≤n ≤30,000,需要建立一个 30,000× 30,000的二维数组,结果会发生数据溢出且超出运行内存上限(128M)。
我们可以采用类似贪吃蛇的方法,让它在N×N个方格内自外向内逐格移动,控制其向右转的方向,并计算其长度。
解法一#include<cstdio>using namespace std;bool pd(int,int) ;int i,j;bool p;int main(){int n,x,y,u,d,l,r,tot=0; // U为上边界,D为下边界,L为左边界,R为右边界;freopen("matrix.in","r",stdin);freopen("matrix.out","w",stdout);scanf("%d%d%d",&n,&i,&j);d=n;r=n;u=1;l=1; //各边界赋初值;x=1;y=0;p=true;while((tot<n*n)&&p){while((y<r)&&p){++y;++tot;pd(x,y);}--r;//在上侧边界上向右移动,当上侧一行的结束时,控制其右边界向左缩一列;while((x<d)&&p){++x;++tot;pd(x,y);}--d;//在右侧边界上向下移动,当右侧一列的结束时,控制其下边界向上缩一行;while((y>l)&&p){--y;++tot;pd(x,y);}++l;//在下侧边界上向左移动,当下侧一行的结束时,控制其左边界向右缩一列;while((x>u+1)&&p){--x;++tot;pd(x,y);}++u;//在左侧边界上向上移动,当左侧一列的结束时,控制其上边界向下缩一行;}printf("%d\n",tot);fclose(stdin);fclose(stdout);return 0;}bool pd(int x,int y) //判断是否到达目的地,如果到达则停止枚举;{if((x==i)&&(y==j))p=false;return p;}解法二:在上一个解法中,如果遇到极端情况时,可能需要枚举达900000000次,这显然太慢了些,我们可以根据贪吃移动的特点对程序进行优化。
NOIP2014(第二十届)初赛普及组C语言试题及答案
第二十届全国青少年信息学奥林匹克联赛初赛普及组C语言试题竞赛时间:2014年10月12日14:30~16:30选手注意:试题纸共有8页,答题纸共有2页,满分100分。
请在答题纸上作答,写在试题纸上的一律无效。
不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。
一、单项选择题(共20题,每题1.5分,共计30分;每题有且仅有一个正确选项)1. 以下哪个是面向对象的高级语言()。
A. 汇编语言B. C++C. FortranD. Basic2. 1TB代表的字节数量是()。
A. 2的10次方B. 2的20次方C. 2的30次方D. 2的40次方3. 二进制数00100100和00010101的和是()。
A. 00101000B. 001010100C. 01000101D. 001110014. 以下哪一种设备属于输出设备()。
A. 扫描仪B. 键盘C. 鼠标D. 打印机5. 下列对操作系统功能的描述最为完整的是()。
A. 负责外设与主机之间的信息交换B. 负责诊断机器的故障C. 控制和管理计算机系统的各种硬件和软件资源的使用D. 将源程序编译成目标程序6. CPU、存储器、I/O设备是通过()连接起来的。
A. 接口B. 总线C. 控制线D. 系统文件7. 断电后会丢失数据的存储器是()。
A.RAMB. ROMC. 硬盘D. 光盘8. 以下哪一种是属于电子邮件收发的协议()。
A. SMTPB. UDPC. P2PD. FTP9. 下列选项中不属于图像格式的是()。
A. JPEG格式B. TXT格式C. GIF格式D. PNG格式10. 链表不具有的特点是()。
A. 不必事先估计存储空间B. 可随机访问任一元素C. 插入删除不需要移动元素D. 所需空间与线性表长度成正比11. 下列各无符号十进制整数中,能用八位二进制表示的数中最大的是()。
A. 296B. 133C. 256D. 19912. 下列几个32位IP地址中,书写错误的是()。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
NOIP2014普及组复赛试题解答
3. 螺旋矩阵
【问题描述】
一个n 行n列的螺旋矩阵可由如下方法生成:
从矩阵的左上角(第1行第1列)出发,初始时向右移动:如果前方是未曾经过的格子,则继续前进,否则右转;重复上述操作直至经过矩阵中所有格子。
根据经过顺序,在格子中依次填入1,2,3,…,n2,便构成了一个螺旋矩阵。
现给出矩阵大小n以及i和j,请你求出该矩阵中第i行第j列的数是多少。
【分析】
这是个蛇形填数问题。
如果采用先枚举二维数组再找对应的元素方法,由于1 ≤n ≤30,000,需要建立一个 30,000× 30,000的二维数组,结果会发生数据溢出且超出运行内存上限(128M)。
我们可以采用类似贪吃蛇的方法,让它在N×N个方格内自外向内逐格移动,控制其向右转的方向,并计算其长度。
解法一
#include<cstdio>
using namespace std;
bool pd(int,int) ;
int i,j;
bool p;
int main()
{
int n,x,y,u,d,l,r,tot=0; // U为上边界,D为下边界,L为左边界,R为右边界;
freopen("matrix.in","r",stdin);
freopen("matrix.out","w",stdout);
scanf("%d%d%d",&n,&i,&j);
d=n;r=n;u=1;l=1; //各边界赋初值;
x=1;y=0;
p=true;
while((tot<n*n)&&p)
{
while((y<r)&&p){++y;++tot;pd(x,y);}--r;//在上侧边界上向右移动,当上侧一行的结束时,控制其右边界向左缩一列;
while((x<d)&&p){++x;++tot;pd(x,y);}--d;//在右侧边界上向下移动,当右侧一列的结束时,控制其下边界向上缩一行;
while((y>l)&&p){--y;++tot;pd(x,y);}++l;//在下侧边界上向左移动,当下侧一行的结束时,控制其左边界向右缩一列;
while((x>u+1)&&p){--x;++tot;pd(x,y);}++u;//在左侧边界上向上移动,当左侧一列的结束时,控制其上边界向下缩一行;
}
printf("%d\n",tot);
fclose(stdin);fclose(stdout);
return 0;
}
bool pd(int x,int y) //判断是否到达目的地,如果到达则停止枚举;
{
if((x==i)&&(y==j))p=false;
return P;
}
解法二:
在上一个解法中,如果遇到极端情况时,可能需要枚举达900000000次,这显然太慢了些,我们可以根据贪吃移动的特点对程序进行优化。
可以这样考虑,当贪吃蛇到每个行列的转折点时,可以先判断目的地是否在自己的正前方,如果是则只需计算当前位置到目的地的距离加上自身的长度即可;否则就计算到下一个转折点人距离,加上当前自身长度,并到达下一个转折点,同时控制所在行(或列)的边界向内侧移动;
#include<cstdio>
using namespace std;
bool pd(int,int) ;
int main()
{
int n,i,j,x,y,u,d,l,r,tot=1; // U为上边界,D为下边界,L为左边界,R为右边界;
freopen("matrix.in","r",stdin);
freopen("matrix.out","w",stdout);
scanf("%d%d%d",&n,&i,&j);
d=n;r=n;u=1;l=1; //各边界赋初值;
x=1;y=1;
bool p=true;
while(p)
{
if(p)
if(x==i) //在上侧边界线上向右移动。
如果目的地在正前方,则当前长度加上当前位置到目的地距离,结束循环;
{ tot=tot+j-y; p=false; }
else //否则,当前长度加当前位置至行未的长度,同时到达右边界位置,并控制其上边界向下移动一列;
{ tot=tot+r-y; y=r; ++u; }
if(p)
if(y==j)
{ tot=tot+i-x ; p=false; }
else
{ tot=tot+d-x ; x=d; --r; }
if(p)
if(x==i)
{tot=tot+y-j;p=false;}
else
{tot=tot+y-l;y=l;--d; }
if(p)
if(y==j)
{tot=tot+x-i;p=false;}
else
{tot=tot+x-u;x=u;++l;}
}
printf("%d\n",tot);
fclose(stdin);fclose(stdout);
return 0;
}
解法三:
对解法二,我们还可以进行优化。
考虑到贪吃蛇总是从外围一圈圈地向目的地前进,而每一圈刚好是一个正方形,我们可以先计算外围各圈正方形的周长之和,再让贪吃蛇从目的地所在圈的左上角出发,计算其从出发地到目的地的长度就可以了。
#include<cstdio>
using namespace std;
bool pd(int,int) ;
int main()
{
int n,i,j,x,y,u,d,l,r,k,t,tot=0; // U为上边界,D为下边界,L为左边界,R 为右边界;
bool p=true;
freopen("matrix.in","r",stdin);
freopen("matrix.out","w",stdout);
scanf("%d%d%d",&n,&i,&j);
x=i<n-i+1?i:n-i+1; //判定目的在哪一圈;
y=j<n-j+1?j:n-j+1;
k=x<y?x:y;
u=k; l=k; d=n-k+1 ; r=n-k+1; //设定各边界;
for( t=1; t<k; ++t)
{ tot=tot+(n-1)*4; n=n-2; } //计算在到达目的地外围所有圈的周长之和;
x=k;y=k;++tot; //进入目的地所在的那一圈,初始化出发地;
if(p)
if(x==i) //向右移动。
如果目的地在正前方,则当前长度加上当前位置到目的地距离,结束循环;
{tot=tot+j-y;p=false;}
else //否则,当前长度加当前位置至行未的长度,到达右边界位置;
{tot=tot+r-y;y=r;}
if(p)
if(y==j)
{tot=tot+i-x;p=false;}
else
{tot=tot+d-x;x=d; }
if(p)
if(x==i)
{tot=tot+y-j;p=false;}
else
{tot=tot+y-l;y=l;}
if(p)
if(y==j)
{tot=tot+x-i;p=false;}
else
{tot=tot+x-u;}
printf("%d\n",tot);
fclose(stdin);fclose(stdout); return 0;
}。