选择题
1.D 【解析】打印机属于输出设备,它将一些信息通过打印机打印出来。扫描仪,键盘,鼠标属于输入设备。
2.D 【解析】 A,B,C选项的十进制数值都是 617 617 617,D选项的数值是 619 619 619。
3.D 【解析】 1 M B = 1024 K B = 1024 × 1024 B 1MB=1024KB=1024×1024B 1MB=1024KB=1024×1024B
4.B 【解析】 广域网的缩写是 W A N WAN WAN,局域网是 L A N LAN LAN,城域网是 M A N MAN MAN。
5.B 【解析】 常识,要对信息学竞赛的背景有所了解。
6.A 【解析】首先我们要知道CapsLock是键盘上用于切换大小写得键。例如,你们来输入的是小写的a,如果你按了CapsLock键,输出的就是大写的 A A A。模拟题目中的规矩,可以得到循环: ( A , S , D , F , a , s , d , f ) (A,S,D,F,a,s,d,f) (A,S,D,F,a,s,d,f)。其中每八个字母一个循环。 81 m o d 8 = 1 81 mod 8=1 81mod8=1,那么输出的就是循环节的第一个字符 A A A。
7.A 【解析】 节点总数为: k k k0 + + + k k k1 + + +… + + + k k kh,接下来的问题就是如何化简这个等比数列了。设 S = k S=k S=k0 + + + k k k1 + + +… + + + k k kh,则 k S = k kS=k kS=k1 + + + k k k2 + + +… + + + k k k3, k S − S = S ( k − 1 ) = k kS-S=S(k-1)=k kS−S=S(k−1)=kh+1 − 1 -1 −1,化简一下就是 S = ( k S=(k S=(kh+1 − 1 ) / ( k − 1 ) -1)/(k-1) −1)/(k−1)。
8.A 【解析】 基数排序是根据每一个数位的大小进行排序的,类似于桶排序的思想。而冒泡排序,堆排序和直接插入排序都是基于比较的。
9.A 【解析】我们可以选用递推的方法,设f[i]为i个数比大小的最小次数, f [ i ] = f [ i − 2 ] + 3 , f [ 1 ] = 0 , f [ 2 ] = 1 f[i]=f[i-2]+3,f[1]=0,f[2]=1 f[i]=f[i−2]+3,f[1]=0,f[2]=1。含义就是对于每一组数,取两个数比大小要 1 1 1次,对于剩下的 i − 2 i-2 i−2个数要 f [ i − 2 ] f[i-2] f[i−2]次,一次最大,一次最小,所以要 f [ i − 2 ] + 1 + 2 = f [ i − 2 ] + 3 f[i-2]+1+2=f[i-2]+3 f[i−2]+1+2=f[i−2]+3次,n=3-10的数据分别是 3 , 4 , 6 , 7 , 9 , 10 , 12 , 13 3,4,6,7,9,10,12,13 3,4,6,7,9,10,12,13,带入得A (好吧我也不是特别会)
10.B【解析】NOIP原题,不断的出现重复和递归的结构十分相似。
11.A【解析】画图,略。
12.B【解析】对于我们所要求的S,相当于一个 10 10 10位的二进制位, 1 1 1表示取, 0 0 0表示不取,则共有 2 2 210 = 1024 =1024 =1024种方案,或者暴力一点, C ( 0 , 10 ) + C ( 1 , 10 ) + C ( 2 , 10 ) + . . . + C ( 10 , 10 ) = 1024 C(0,10)+C(1,10)+C(2,10)+...+C(10,10)=1024 C(0,10)+C(1,10)+C(2,10)+...+C(10,10)=1024,显然这两种方法都是可行的;对于T,显然是10选7的组合数,即 C ( 7 , 10 ) = 120 C(7,10)=120 C(7,10)=120,那么 T / S = 120 / 1024 = 15 / 128 T/S=120/1024=15/128 T/S=120/1024=15/128,选择答案B。
13.B【解析】求10000的欧拉函数,根据唯一分解定理, 10000 = 2 10000=2 10000=24 ∗ 5 *5 ∗54,那么就可以直接根据公式, φ ( 10000 ) = 10000 × ( 1 − 1 / 2 ) × ( 1 − 1 / 5 ) = 4000 。 φ(10000)=10000×(1-1/2)×(1-1/5)=4000。 φ(10000)=10000×(1−1/2)×(1−1/5)=4000。
14.B【解析】树状数组 l o w b i t lowbit lowbit运算,求二进制位有多少个 1 1 1。当然考场上最简单的方法莫过于带一个数进去了,算完后就知道ACD算不出答案。
15.B【解析】结构类似于桶,先进后出,属于数据结构栈。
问题求解
第一题.去了 没去 没去 没下雨
【解析】
从中我们知道一个规律,如果 A B AB AB都成立那么 C C C成立,若C不成立,A和B中有一个成立的时候另一个便不成立。
因为丙去了,根据已知 ③ ③ ③可知丁不去。
根据 ④ ④ ④,如果丁和甲同时不去,说明丙也不能去,而因为丁去了,只有让甲去丙才能不去。
根据 ② ② ②,如果乙去则丁去,当丁没去说明乙也没有去。
根据 ① ① ①,如果下雨且乙不去那么甲也不去,而乙去了,甲却没去,说明没有下雨。
我们要根据已知去推,这也是一道比较简单的逻辑题了。
第二题. 544 544 544
【解析】
我们从位数去考虑。
1位数: 1 1 1个。只有一个数字 8 8 8.
2位数:如果十位 1 , 2 , 3 , 4 , 5 , 6 , 7 , 9 1,2,3,4,5,6,7,9 1,2,3,4,5,6,7,9,那么有 8 8 8个(后面都接上1位的方案数);如果十位是 8 8 8,则有 10 10 10个数字( 8 8 8后接任意数组均可)。共有 8 + 10 = 18 8+10=18 8+10=18(个)
3位数:如果百位 1 , 2 , 3 , 4 , 5 , 6 , 7 , 9 1,2,3,4,5,6,7,9 1,2,3,4,5,6,7,9,那么有面可以跟个位有数字 8 8 8的(如 108 108 108),也可以跟十位有数组 8 8 8的(如 188 188 188),共 8 × ( 1 + 18 ) = 152 8×(1+18)=152 8×(1+18)=152种;若百位是 8 8 8,有 100 100 100种方案。共有 152 + 100 = 252 152+100=252 152+100=252(个)
4位数: 1 1 1开头有 1 + 18 + 252 = 271 1+18+252=271 1+18+252=271(个); 2 2 2开头有 2008 , 2018 2008,2018 2008,2018,共 2 2 2个;共有 271 + 2 = 273 271+2=273 271+2=273个。
共计: 1 + 18 + 252 + 273 = 544 1+18+252+273=544 1+18+252+273=544(个)
阅读程序写结果
1. R u a n H u o M i a n T a i RuanHuoMianTai RuanHuoMianTai
【解析】程序的左右是扫描字符串的每一个字符,使得每一个大写字母ASC码+1,或者变成刚刚比它大1(或后面)的大写字母。
2. 4 4 4
【解析】程序的作用是从1-14种寻着是否存在数i,使得 i i i2 m o d 15 = 1 mod 15=1 mod15=1(或 i i i2 % 15 = 1 15=1 15=1),通过手动计算不难发现满足条件的数字是 1 , 4 , 11 , 14 1,4,11,14 1,4,11,14;共计 4 4 4个数,因此答案是 4 4 4。
3. 8 8 8
【解析】这是一道递归的计算题,如果直接这么做显然显得麻烦了。因此我们可以通过画二维表的方式来求解这个答案。
对于第0行,其大小为该纵坐标。
对于第0列,其大小为该横坐标对于3取模的值。
对于任何一个非0坐标,其大小为上面的数值加上左上角的数值减去左边的数值。
我们可以采用递推的方法解决。
4. 6 6 6
【解析】这道题就是一个模拟链表的过程,查找有多少个联通快。仔细模拟,发现是6个。
完善程序
1.最大公约数之和 答案:i * i; n/i; return a; a%b; ans+gcd(a[i],b[i])
【解析】 题目的过程就是先找到所有的因数,再进行累加。
我们首先看第一段,有一个函数的名称叫做getDivisor,其实就是求解每一个n的因子。
依照题意,时间复杂度是(Osqrt(n)),那么我们在每一因子i的时候就是1-sqrt(n)这个区间来枚举的。对于最大情况,只有i * i=n,超过就不满足时间复杂度和枚举的要求了,因此第一空所填的就是i * i。当枚举的时候如果这个数是i的因子那么就接着统计。以36为例,i是从1-6来枚举的,如果枚举到2,那么因子18就是通过36/2,或者是n/i来得到;特别的,当i=6的时候,不需要操作,此时n=i*i,即n/i=i时不需要进行操作,所有第二空所填的是n/i。需要注意,尽管使用sqrt函数仍然属于等价写法,但是程序中并没有加载cmath库,因此这么写是错误的。
再看求去最大公因数的过程gcd,这就是一个模拟辗转相除法的过程。复杂度是O(logMAXAB)级别的,因此不要写成是辗转相减法。如果余数是0就返回a,那么第三空就是return a;否则继续取模,因此第四空是a%b。
接下来就是累加答案,累加每一个质因子即可,存在ans上面。因此第五空是ans+gcd(a[i],a[j])。
2.链表 答案:a[x]=i;i+1;R[a[i]];a[i];R[i]
【解析1】套路法(分数8-14)
空1:唯一可行的两个答案a[i]=x和a[x]=i,若是前者可直接cin>>a[i]代替,故答案为后者。
空2:L是i-1,那么R是指向右节点的,上下符号相反,必然是i+1
空3/4:上下文对称,L和R恰好反一下。例如第一句是L[R[a[i]]]=L[a[i]];第二句是R[L[a[i]]]=R[a[i]],根据双向链表的对称性很容易得到答案。
空5:套中套,很多人想到的是R[a[i]],符合上文的结构,但是阴险的出题人一定会在最后一个空坑你一把,只让你输出最简单的R[i],你也可以考试的时候推一下。
【解析2】理解算法含义
第一空是标记每一个x出现的位置;
第二空双向链表R指向后面的元素,即i+1;
三四空是用于删除元素,这是链表最基本的删除操作,可以自行理解数据结构的实现;
第五空主要是输出每一个元素的答案,但是要按照输入的顺序进行输出因此要R[i]而不是R[a[i]],否则就按照了大小的顺序输出了。
试题答案
本人预估浙江分数线85上下
(不要14年那么恐怖就好)
浙江学子依旧生活在水深火热之中…
能在考场上拿到90分已经是很满意了。
若有疏忽或者意见望大家指正。