2021年市北区程序设计竞赛试题(初中组)
1.开关灯(light.cpp)
【题目描述】
某实验室共有n盏灯,灯的编号为1~n,每盏灯的初始状态是关闭的。现在有m位学生,每位学生可以前去抽取一张带数字的卡片,其数字为Ai,然后依次将自己手中的数字卡片倍数编号的灯进行操作,开的灯将会被关闭,关闭的灯则会被重新打开,这个过程进行k轮后有多少盏灯最终状态为打开。
【输入描述】
第一行是三个整数n,m,k。
第二行是m个整数A
【输出描述】
一个整数,为最终为打开状态的灯的数量。
【样例输入】
10 10 1 1 2 3 4 5 6 7 8 9 10
【样例输出】
3
【样例解释】
第1位学生持有卡片上的数字为1,会把所有的灯都打开,第2位学生持有的卡片上数字为2,会把2的倍数的所有灯进行操作,开的灯将被关闭,关闭的灯则会重新打开,第3位~第10位同学依次按照这种方法操作,1轮结束后有3栈灯是打开的。
【数据范围】
80%的数据:1<=n<=1000,m<=1000,ai<=n
100%的数据:1<=n<=1000,m<=1000,ai<=n,k<=1000
2.阶乘问题(fac.cpp)
【题目描述】
给定一个正整数n,求出一个最小的整数m并使得m!的末尾连续的0的个数不小于n。
m!=1*2*3*4*...*m
【输入描述】
第一行n。
【输出描述】
一个整数m。
【样例输入】
5
【样例输出】
25
【数据范围】
30%的数据:n<=20
70%的数据:n<=100
100%的数据:n<=100000
3.有序数组(array.cpp)
【题目描述】
给定一个数组,其中每个元素均为1-2000之间的正整数,现在可以使用1到2000之间的整数区替换数组中的任意元素,替换完成后新数组构成的需求位不下降序列。要求替换次数尽可能少。如果替换次数相同,输出替换后的数组元素之和最小的方案。
【输入描述】
第一行为整数n。
第二行为n个正整数ai。
【输出描述】
n个正整数,为替换后的数组。
【样例输入】
3 10 8 7
【样例输出】
1 1 7
【数据范围】
30%的数据:n<=50
100%的数据:n<=2000
4.队列问题(lru.cpp)
【题目描述】
有一个大小为n的页面缓存队列,初始为空,当计算机访问页面时,若缓存队列没有该页面,则加入到缓存队列中,若队列已满,则将删除访问时间最远的页面。
有Q次询问,每次询问输入一个整型x,表示访问页面x。若缓存队列中有则输出yes,否则输出no。
【输入描述】
第一行,2个空格隔开正整数n,Q
以下Q行:每行是一个整型x。
【输出描述】
Q行,每行可能为yes或者no
【样例输入】
3 10 1 2 1 3 5 6 1 5 2 6
【样例输出】
no no yes no no no no yes no no
【样例解释】
【数据范围】
60%的数据:n<=1000,Q<=1000;
100%的数据:n<=100000,Q<=100000