初赛题解
文章平均质量分 91
解答信奥初赛问题
君义_noip
五道口职业技术学院毕业
信息学奥赛教练
小说作者
展开
-
CSP-S 2024 提高级 第一轮(初赛) 阅读程序(2)
例:如j为0,s[i]为’1’,那么k = (j原创 2024-09-25 01:20:30 · 632 阅读 · 0 评论 -
CSP-S 2024 提高级 第一轮(初赛) 阅读程序(1)
前面的下标i选择大于等于pivot的元素,后面的下标j选择小于等于pivot的元素,二者交换。选择c[0]为标杆元素,从前向后找第一个大于等于c[0]的元素是c[0],从后向前找第一个小于等于c[0]的元素为c[4],二者交换,由于二者的数值都为5,所以c数组从数值角度来看没有变化。当B不是A的子集时,a ^ b表示的是在A中但不在B中的元素,以及在B中但不在A中元素构成的集合,即。表示在X中但不在Y中的元素,以及在Y中但不在X中元素构成的集合,也就是。,也就是在集合Y中但不在集合X中的元素构成的集合。原创 2024-09-24 22:18:45 · 726 阅读 · 0 评论 -
CSP-S 2023 提高级 第一轮(初赛) 完善程序(2)
观察选项,A和C中涉及到了a[i]或a[i-1],pre的下标i和a的下标i之间存在pre[i] == a[mid+i]这样的关系,而pre[i]和a[i]没有直接关系,表达式中不应该出现a。例如,当原序列为 [1,2,1,2]时,要计算子序列 [1]、[2]、[1]、[2]、[1,2]、[2,1]、[1,2]、[1,2,1]、[2,1,2]、[1,2,1,2]的最大值之和,答案为 18。,pre[i]更新后的意义为pre[0]~pre[i]的最大值,也就是a数组区间[mid, mid+i]的最大值。原创 2024-09-18 09:50:41 · 756 阅读 · 0 评论 -
CSP-S 2023 提高级 第一轮(初赛) 完善程序(1)
根据拓扑排序的算法,如果v的入度减少1后入队,而现在是在v的入度减少前判断,如果满足该条件就将v添加进Q,那么此时应该填的条件为v的入度为1,则把Q加入顺序表Q。而后遍历u的邻接点v,对于每个顶点v,都有f[v]个从v出发的路径,根据拓扑排序的顺序,此时f[v]的值已经确定了。先对cand进行从小到大的排序,根据主函数中的代码,cand要么是Q,要么是E[u],vector中保存的都是顶点编号,因此此处是根据顶点编号从小到大排序。,也就是代码中的LIM,因此f[u]的最大值如果超过LIM,就是设为LIM。原创 2024-09-16 21:06:18 · 950 阅读 · 0 评论 -
CSP-J 2019 入门级 第一轮(初赛) 完善程序(1)
结合划分子矩阵的方案,可以知道,(x, y+step)是右上方子矩阵的左上角位置,(x+step, y)是左下方子矩阵的左上角的位置,因此第(2)空应该填左上方子矩阵左上角位置(x, y),选D。当前函数传入t,指的是当前矩阵左上角值为t,而后前三次递归调用传入的都是t,表示左上、右上、左下的子矩阵的左上角的值和整个矩阵左上角的值相同,第四题递归调用时传入的是!的矩阵,其中左上、右上、左下的子矩阵的左上角的值和整个矩阵左上角的值相同,只有右下方子矩阵左上角的值与整个矩阵左上角的值不同。原创 2024-09-16 10:31:38 · 1044 阅读 · 0 评论 -
CSP-S 2023 提高级 第一轮(初赛) 阅读程序(3)
而后进行二分,二分的的范围(也就是起始时上界减下界)为h-g,h为a中最大值减最小值,该题说a中最大值减(最小值加1)为A,所以A为h-1(另一种理解可以理解为A=h+1,但都不影响结果),该二分查找的比较次数为。也就是说,数对(a[j], a[i]),(a[j+1], a[i]),…因此差值最小为5,该题正确。当遍历到第i元素a[i]时,只要a[i]和a[j]的差值大于m,j就增加。下一次循环i增加,看当前a[j]和a[i]是否满足a[i]-a[j]原创 2024-09-14 17:25:09 · 1284 阅读 · 1 评论 -
CSP-S 2023 提高级 第一轮(初赛) 阅读程序(2)
而将g[j]设为k,即为将g[j]设为i,不符合g[j]表示j的最小质因数在j中的幂的概念,接下来再计算结果很可能不一样。的数字,所有合数已经在上述埃筛过程中设好了f和g数组的值,质数还没有设,把质数i的最小质因数设为i,最小质因数的幂也设为i。接下来for冒号遍历顺序表d,k就是按顺序每次取出的d中的元素,即保存在其中的i的幂。i从1到n循环,先看1的贡献,再看2的贡献,。的时候,发现j是k的倍数,因此j分解质因数后,其最小质因数的幂为k。观察j遍历的顺序,先取较大的i的幂,再取较小的i的幂,当k为。原创 2024-09-13 14:19:51 · 1249 阅读 · 0 评论 -
CSP-S 2023 提高级 第一轮(初赛) 阅读程序(1)
由于一些计算过程中机器数中的1比较少,表示一个机器数可以不用写出机器数的每一位,只需要标出其有1的位置即可。输入的x不超过65535,说明输入的数字在unsigned short可以表示的数字范围内。6.当输入为 64 时,执行完第 5 行后 x 的值为()。的低6位为0,为了保证结果为0,那么x的低6位也为0。的第13到第16位为0,那么x的第13到16位为0。的第7到12位为0,那么x的第7到12位也为0。6. 当输入为 512 时,输出为()。5.当输入为 512 时,输出为()。原创 2024-09-13 12:00:49 · 855 阅读 · 0 评论 -
CSP-J 2021 入门级 第一轮 完善程序(1)
判断当前数1还是数0的变量应该是p(就剩下p变量没有用了),p为1表示应该数1,p为0表示应该数0。因此第(2)空应该填p为1,作为判断条件,p为1、p为真、或只写p的效果是一样的。第(4)空为p的变化,p应该是如果是0就变1,如果是1就变0,从0号开始,依次0,1,0,1,…i是F数组的下标,应该对F数组进行循环遍历,直到只有一个元素还在,i遍历到n-1时,i的下一个位置是0,因此第(5)空应该填i的变化方式,即。如果F[i]为0,也就是i还在,那么接下来就该考虑第i人是否数到1,如果数到1就该离开。原创 2024-09-11 18:11:11 · 556 阅读 · 0 评论 -
CSP-J 2019 入门级 第一轮(初赛) 阅读程序(3)
最好情况下,每次选出的最小值的位置在区间的中点,这样将整个区间分为两个子区间,遍历两个子区间的长度加和为n。对于长为i的区间,如果a数组最小值下标为区间的第x位置,则将其分为长为x-1和长为i-x两段区间,两段区间生成的树的结点层数加和分别为。最坏情况下,每次选出的最小值在区间的左端或右端,这样下一次面对的区间的长度是上一次面对的区间长度减1。为了使结果最大,那么应该让第1层的值为1,第2层的值为2,。整个区间不断一分为二,直到每个区间长度为1,也就是在求n除以2多少次后为1,除的次数为。原创 2024-09-11 12:46:41 · 941 阅读 · 0 评论 -
CSP-S 2022 提高级 第一轮试题(初赛)答案及解析
答: Bls的作用是列出当前目录中的所有文件cd是切换目录cp是复制文件Linux中没有all命令答:Areal: 总的运行时间,从命令开始执行到结束的时间,包括等待CPU时间和其他进程时间。user: 用户CPU时间,即在用户态下花费的时间,不包括用于内核操作的时间。sys: 系统CPU时间,即在内核态下花费的时间,比如执行系统调用所花费的时间。秒表计时的时长接近于程序运行的总时间,即real后面显示的时间。原创 2024-09-08 18:05:41 · 2785 阅读 · 0 评论 -
CSP-S 2022 提高级 第一轮 完善程序(2)
就说明从当前容器1有x升水容器2有y升水经过一次操作后使得容器1有M升水容器2有N升水,而后不断操作直到某容器有c升水的操作步数和从当前容器1有x升水容器2有y升水不断操作直到某容器有c升水的最少操作步数。求出),加上刚才的一次操作得到的操作序列,就是一个备选的从容器1有x升水容器2有y升水的情况下经过不断操作直到某容器有c升水的操作序列。如果该操作序列的步数比已知的最小步数。相同,那么该操作就是可行的,输出这一次的操作,然后再输出从容器1有M升水容器2有N升水,到某容器有c升水的操作序列。原创 2024-09-08 17:57:09 · 1339 阅读 · 0 评论 -
CSP-S 2022 提高级 第一轮 完善程序(1)
如果left1不为0,即p1不为0,由于p1+p2=k,有p2=k-p1,其在a2中的下标为k-p1-1即k-left1-1。如果left2不为0,即p2不为0,由于p1+p2=k,有p1=k-p2,其在a1中的下标为k-p2-1即k-left2-1。如果left1为0,即p1为0,那么由于p1+p2=k,p2必须为k,其在a2中的下标为k-1,所以返回a2[k-1]。如果left2为0,即p2为0,那么由于p1+p2=k,p1必须为k,其在a1中的下标为k-1,所以返回a1[k-1]。原创 2024-09-07 00:39:51 · 1191 阅读 · 0 评论 -
CSP-S 2022 提高级 第一轮 阅读程序(3)
而后从高位到低位遍历,输出分离出的各个数字,对于大于等于10的数字,将其转为大写字母输出,其中’A’表示10,'B’表示11,……假设输入的 n 在 int 范围内,k 为不小于 2 且不大于 36 的正整数,完成下面的判断题和单选题:。则a除以-b的实数商为-c,-c和c是相反数,相反数向零取整的结果也互为相反数,所以-c向零取整为-q。,结合m初值为0,可以看出这是在做数组填充,填充的数在ans数组中的下标范围是0~m-1。,而后n变为n除以k的商并将符号取反,将取出的数字从后向前排列,即为结果。原创 2024-09-06 17:31:39 · 1371 阅读 · 1 评论 -
CSP-S 2022 提高级 第一轮 阅读程序(2)
最后一次按第m-1位从小到大排序,每次排序使用的是计数排序的方法,共有基数个数个桶(即k个桶,也就是指。,对于val数组中第i为数字相同的各个数值,在val数组中靠后的数值,赋值到temp数组中也应该是靠后的。因为有进行n次的循环(第29、31、35行),该题没有给出n是多少,n的大小会影响运算次数,因此无法只靠k的大小决定运算次数。而后j从0~n-1循环,n是数值个数,为val数组的长度,因此这一次循环是遍历val数组。接下来下一个第i位的数字为x的val数组中的数值,可以认为是排序后的第。原创 2024-09-06 14:09:17 · 1379 阅读 · 0 评论 -
CSP-J 2023 入门级 第一轮试题(初赛)答案及解析
答:选B。声明常量的格式是 const 数据类型 常量名 = 常量值;123456708076543218222222218211111118221111118222222118答:选D列竖式,两数相加,逢8进1。123456700765432122222211答:选A。考察联合体union。原创 2023-09-23 15:18:42 · 5772 阅读 · 3 评论 -
CSP-J 2023 入门级 第一轮 完善程序(2)
i为0时,str1的前0个字符转变为str2的前j个字符的操作方案为j次插入,操作次数为j。j为0时,str1的前i个字符转变为str2的前0个字符的操作方案为i次删除,操作次数为i。就是str1的前i-1个字符转变为str2的前j-1个字符的最少操作次数,(4)填B。,那么接下来要将str1的前i-1个字符转变为str2的前j-1个字符,(5)填C。指表示str1的前i个字符转变为str2的前j个字符的最少操作次数。就是最后一次进行插入、或删除、或修改时的最少操作次数。如果str1第i字符。原创 2023-09-22 21:30:06 · 1610 阅读 · 0 评论 -
CSP-J 2023 入门级 第一轮 完善程序(1)
也就是说如果丢失的数字是n+1个数字中的第1个或最后一个,find_missing函数会返回(5)处应该填的值,此时整个序列就是连续的。while循环跳出后,left或right的值就是找到的是"大于缺失数字"的最小值的最小下标,该下标就是上表中的m,缺失的值应该是。该题要找的是缺失的数字,那么二分查找的条件就可以是“大于缺失数字”,二分查找后找到的是“大于缺失数字的最小值的最小下标”。如果去掉的数字就是第一个数字s,或最后一个数字,整个序列是连续的序列,无论mid为何值,都满足。原创 2023-09-22 21:10:54 · 1761 阅读 · 3 评论 -
CSP-J 2023 入门级 第一轮 阅读程序(3)
如果n是2,第一项是4的所有因数1,2,4的平方和,是21。第二项是2的所有因数1,2的平方和5的平方为25。27. 如果输入的n为正整数,solve2函数的作用是计算n所有的因子的平方和( )27. 如果输入的n为正整数,solve2函数的作用是计算n所有的因子的平方和( )30. 如果输入的n为质数p的平方,那么solve2(n)的返回值为( )30. 如果输入的n为质数p的平方,那么solve2(n)的返回值为( )因此solve2(n)求的是n的所有因数的平方和。的所有因数的平方和。原创 2023-09-21 21:49:53 · 1070 阅读 · 0 评论 -
CSP-J 2023 入门级 第一轮 阅读程序(2)
f函数求x与y的最长公共子序列的长度,两字符串最长公共子序列的长度不会大于两字符串中任意一个字符串,最长时也就是与两字符串中更短的字符串一样长。当x与y相同时,x+x中一定存在子串y(即子串x),子串就是子序列,所以x+x与y的最长公共子序列的长度就是y的长度,g函数返回真。如果输入的x与y长度相等(空字符串无法输入,字符串长度最小为1),在g函数中调用的是f(x+x, y),运行到函数内部,主函数,输入x,y字符串,输出x+x是否存在一个子序列是y字符串,如果存在输出1,否则输出0。原创 2023-09-21 21:01:30 · 1416 阅读 · 0 评论 -
CSP-J 2023 入门级 第一轮 阅读程序(1)
主函数中前两句是用于设定浮点数输出格式,输出时固定保留4位小数,最后一位四舍五入,不足4位则补0。很明显,a,b,c是三角形的三条边,s是半周长,f函数为使用海伦公式求三角形的面积。16. 当输入为"2 2 2"时,输出为"1.7321"( )16. 当输入为"2 2 2"时,输出为"1.7321"( )运行这两句后,设置了输出浮点数的格式为保留4位小数输出。20. 当输入为"5 12 13"时,输出为( )19. 当输入为"3 4 5"时,输出为( )19. 当输入为"3 4 5"时,输出为( )原创 2023-09-21 18:23:06 · 1938 阅读 · 2 评论 -
CSP-J 2020 入门级 第一轮 完善程序(2)
明显这是数组填充的过程,p是数组中已有的元素个数,填充到下标0~p-1。ans是选择的区间数量,r为上文提到的关注点(上一个选择的区间的右端点),q是数组A的下标,初值为0。要想选择“包含关注点的区间”,应该按区间的左端点从小到大进行排序。:在最优解包含前k次的贪心选择的情况下,存在最优解包含第k+1次的贪心选择。:最优解包含第一次的贪心选择:在所有包含0的区间中,选择右端点最大的区间。这一次选择的,也就是唯一包含第0位置的区间,记该区间为。这样做的结果是,经过再次填充后的数组A,关于右端点。原创 2023-05-19 17:47:55 · 1890 阅读 · 0 评论 -
CSP-S 2022 提高级 第一轮 阅读程序(1)
shift后面的括号中传入两个参数,这是使用了vector的构造函数,传入的第1个参数表明初始化元素的个数,第二个参数是每个元素的值。是字符,作为shift的下标,也就是以字符的ASCII码为下标,这也对应了shift中要有128个元素。21. 当输入为“baaabaaabaaabaaaa aaaa”,第 20 行的“j++”语句执行次数为( )。匹配1个a,j++执行1次,遇到b与a不相等。i为13,执行字符串最后aaaa中的第1个a,与模式串aaaa匹配4个a,j++执行4次。原创 2023-05-11 14:31:30 · 2693 阅读 · 1 评论 -
CSP-J 2022 入门级 第一轮 完善程序(2) 第40-44题
颜色填充的操作描述如下:给定起始像素的位置和待填充的颜色,将起始像素和所有可达的像素(可达的定义:经过 一次或多次的向上、下、左、右四个方向移动所能到达且终点和路径上所有像素的颜色都与起始像素颜色相同),替换为给定的颜色。传入的image为图像二维数组,pt为被判断是否合法的位置,prev_color为起始位置颜色,new_color为要改变为的新颜色。是构造函数成员初始化列表的写法,意思是在调用构造函数时,将传入的第一个参数赋值给成员变量r,第二个参数赋值给成员变量c。元素类型为可迭代对象中元素的类型。原创 2022-09-24 12:00:52 · 4334 阅读 · 2 评论 -
CSP-J 2022 入门级 第一轮 完善程序(1) 第35-39题
fac中的元素为:fac[0], fac[1], …, fac[fax.size()-1],接下来应该输出的是:n/fac[fax.size()-1], n/fac[fax.size()-2], …factor是因数的意思,所以fac这个vector保存的是因数。数字i若是n的因数,那么n能整除i,n除以i的余数为0。,手动设置vector的容量,预先为vector对象分配空间,以免在运行过程中触发扩容。输出fac中的第k个元素:fac[k]。那么接下来应该输出n/d, n/c, n/b, n/a。原创 2022-09-23 18:00:20 · 4725 阅读 · 0 评论 -
CSP-J 2022 入门级 第一轮 阅读程序(3) 第28-34题
所以在solve2中x=(x+n/x)/2=(16+256/16)/2=16,每次计算后x的值不变,都是16。把1传入solve2,x为1,循环1次,x = (x+n/x)/2=(1+2/1)/2=1.5,函数的返回值,也就是ans的值为1.5。sove2中x=99,k为1,for循环执行一次,x=(x+n/x)/2=(99+9801/99)/2=99。把1传入solve2,x为1,循环10次,,每次循环让x=(x+n/x)/2,用模拟运行法。solve1函数是二分算法,二分查找的范围为n,复杂度为。原创 2022-09-23 15:42:00 · 4666 阅读 · 0 评论 -
CSP-J 2022 入门级 第一轮 阅读程序(2) 第22-27题
设想j=4时,i从0到7,h[i][4]的值与h[i][3]的值都相同,那么从h[8][4]开始,随着i的增大,需要填一些4,那么什么时候应该填5呢,需要让每个数对的最大值都是4,前面h[0][3]到h[7][3]是0,1,2,2,3,3,3,3,共8个数字,需要与后面8个数字4配对,这8个数字的位置应该为h[15][4]到h[8][4],这样最大值都是4,接下来h[8][3]往下都是4,与j=4的一列较小值配对,最大值都是4。j是2时确定了有2个2,j是3时确定了有4个3,j是4时就能确定有8个4,…原创 2022-09-23 12:27:03 · 7402 阅读 · 5 评论 -
CSP-J 2022 入门级 第一轮 阅读程序(1) 第16-21题
(例如对机器数10000000左移1位操作,如果是16位机器数,结果为100000000,如果是八位机器数,结果为00000000)。看一下后面几题,也能看出不可能对于什么输入,输出的都是0,否则后面三题都当做结果是0好了。看x的后4位,x为0010,x原创 2022-09-21 18:18:04 · 9087 阅读 · 2 评论 -
CSP-J 2022 第一轮试题(初赛) 答案及解析
已知入栈顺序是:e1,e2,e3,e4,e5,e6,出栈顺序是:e2,e4,e3,e6,e5,e1,请问在整个入栈出栈过程中栈中元素的最大个数。中用到的都应该是变化前的p->next,指向的是原来p的下一个结点。printf是C语言中就可以使用的函数,而c++中定义类或结构体,对象调用成员函数,构造派生类,都是面向对象语言才能支持的操作。C选项中,当4出栈时,4前入栈的6,5一定都在栈中,情况为:栈底-6-5。二叉树的顺序存储结构中,第i结点的左孩子的下标为2*i,右孩子的下标为2*i+1,双亲的下。原创 2022-09-21 16:32:31 · 22483 阅读 · 14 评论 -
CSP-J 2019 入门级 第一轮(初赛)阅读程序(2)
至此已了解整段代码的功能为:有两列n个数字,输入m个数对,让两列中对应数字连线,如果新的连线会使得连线两边的数字连到的数字更大,则更新连线。一共会连线m对数字,未连线的数字减少2m个,总数字数量是2n个,所以剩下的未连线数字数量为2n-2m个,选A。两列数字中只有1–2连线,当i为1时,a[1]为2,b[1]为0,运行++ans,ans为1。两列数字中有1–2,2–1连线,那么a[1]是2,b[1]是2,都大于0。m个y都相等,最终y只能与左侧的1个数字相连,未相连的数字为2n-2,选A。原创 2022-09-17 11:32:36 · 683 阅读 · 1 评论 -
CSP-J 2019 入门级 第一轮(初赛)阅读程序(1)
那么该段代码的含义为:i从1到n循环,如果i是n的约数,那么第i(从1开始)个字符如果是小写,变为大写。6.若输入的字符串长度为(),那么输入的字符串跟输出的字符串相比,至多有 3636 个字符不同。5.若输入的字符串长度为 1818,那么输入的字符串跟输出的字符串相比,至多有()个字符不同。4.若输入的字符串全部由大写字母组成,那么输出的字符串就跟输入的字符串一样。,因此可以看出,i指的是当前字符串中的第几个字符(从1开始数)。,还是可能是n的约数的。,n是i的整数倍,或者说i是n的约数。原创 2022-09-01 18:49:23 · 816 阅读 · 0 评论 -
【初赛题解】NOIP 2012 普及组初赛 第28题 排列数
在1~5中选3个数字做排列,已经数到145,接着改变倒数第二位,把4变为5,而后最后一位需要变为字典序最小的且没用过的2,所以下一个排列为152,然后153,154。如果某位置的值改变了,flag变为true,会运行进入下一段。假设n是5,m是3,在1~5中选3个数字做排列,先是123,而后改变最后一位变为124,接着是125。此时考虑,如果第i位的值已经改变了,接下来就需要将第i+1到最后一位的值变为可能的字典序最小的序列。的作用下,重新进度对i的循环,从末尾开始向前找一个位置,改变这个位置的值。....原创 2022-08-05 14:14:12 · 1081 阅读 · 1 评论 -
【初赛题解】NOIP 2010 普及组初赛 第28题 过河问题
如果河岸右侧只有2人,这2人,就直接一起走到左岸了,时间为这两人中过河时间最长的时间,也就是ans。,那么让他到右侧,ans是tmp的最小值,返回的ans应该是所有人从右侧到左侧的最小时间,所以tmp应该是这一次让第i人从左侧到右侧,然后继续直到所有人完成过河需要的最小时间。观看if语句下的结构,先让i,j走到左侧,再让i,j变回为右侧。返回的ans是所有人走到左侧的最小总时间,而观察代码可知ans是每次求出的tmp的最小值,那么tmp就是当前选中i,j从右侧走到左侧时,所有人从右侧到左侧的最小时间,...原创 2022-08-05 12:03:13 · 1311 阅读 · 0 评论