CCF NOI plus 201(7)6 初赛题 解题报告
GTMDCCF。
今年这题怎么评价?
去看我在知乎的回答:https://www.zhihu.com/question/66621360/answer/244222388
挨个说一遍。
单项选择题
T1.CCF有毒,我一个cpp选手有什么义务去关注pascal的存亡问题?挺让我震惊的,虽然我知道这个时间。
2022年。
T2.补码,考前正好复习到了这个考点,这个数是10101011,显然它是负数,所以补码等于反码+1.
反码为除符号位外按位取反,这样就得到了11010100,补码就是11010101,-(2^0 + 2^2 + 2^4 + 2^6) = -85.
T3.说实话一开始拿到这个题我是懵逼的,但其实一想发现,16位,16位。。嗯,8个二进制位是1byte,这样一个16位是不是2啊。。
那我试试1600*900*2/1024?噫,还真算出来了。
T4.丧心病狂的推建国日的星期,我反正没推出来。。查日历可得是星期六。
T5.好题。有一个连通图有n个节点m条边,问至少删掉多少边会使这个图变成一棵树。
如果你代数求值会在A和B之间徘徊不定。但是 你可以想啊,树有什么性质?一棵n个点的树有n-1条边啊,那不妨设我们最少需要删掉x条边,然后有m-x = n-1,算出x是m-n+1就好了。
T6.这个递推关系式比去年那个稍微好看点。。
之前我貌似做过一个T(n) = 2T(n/2) + n的,我还记得答案,于是猜测是不是有相似的性质。。这个题,T(n) = 2T(n/2) + nlogn,前边那个递归应该是logn,两边乘起来就是C选项,遂选之,居然对了。
T7.后缀表达式,考之前有好多人问我怎么做。。。
我记得老师用的方法是画树,这个太麻烦了。。
其实只需要按照每个操作加括号就好,保证每个括号里只有一个运算符外加两个数,然后把符号相应的移到其所在的右括号之前,删掉所有括号就是答案。
T8.我不会啊
T9.这个好像是一个排列组合。。我当时算错了。。。应该选120但我选的96。。。
T10.说实话这题做错也有我方法有误的原因。本身这个是一个递推式可以求通项公式然后再看无限逼近的。。。
我居然想到了画图。。。画图发现也是无限逼近,但毕竟草图不精确,鬼知道我定到的点是0.666还是0.618。。
T11.卧槽这题我也做错了?应该是2n-1。。
T12.这题做对了。。。
强行程序填空。。。从去年开始就是这样,保不准明年还会有?
从一个地方就能看出来,c语句是给n赋值,而下面正好对应的是对n值的判定,那自然是第三个空填c语句,只有D选项是,选D。
T13.原来是动态规划的老祖宗数字三角形。这题最早出现在IOI1994,当时难倒了不少人,现在已经成最简单的例题之一了。。。时代变化真快
当时求的是最小路径,这个求最大路径,还不都一样。。
选A。
T14.人教版高中数学选修2-3第二章,概率有关的内容。我就用平时做题的做法做出来了,挺简单的。
设事件A = “第一个航班准点”
设事件B = “第二个航班准点”
设事件C = “第三个航班准点”
设事件D = “小明旅行成功”
则有P(A) = 0.9 , P(B) = 0.8 , P(C) = 0.9.
可以推出 P(A的对立面) = 0.1 , P(B的对立面) = 0.2.
(X的对立面应该写作X上边一道横线,我不知道这样的符号怎么打出来。。。)
由题意可知,第1个航班晚点,第2个航班准点,旅行失败;且第2个航班晚点,第3个航班准点,旅行失败
则可以推出P(D的对立面) = P(A的对立面)P(B) + P(B的对立面)P(C) = 0.08 + 0.18 = 0.26.
则答案P(D) = 1 - P(D的对立面) = 1 - 0.26 = 0.74.
挺简单吧。
T15.人教版高中数学选修2-3第二章,数学期望有关的内容。
我们知道,期望 = 均值*概率。
我们知道乒乓球平均喷出速度为2个/秒,喷三分钟平均会出2 * 180 = 360个球
小朋友只能坐在某一节车厢里,一节车厢占整个场地面积的二十分之一,只有球落到车厢里面小朋友才能捡到。
由几何概型的相关知识,接到球的概率就是二十分之一。
所以期望值 = 360 * 1/20 = 18. 压轴题并没有想象中那么难,反倒挺简单。
不定向选择题
T1.最坏情况下快排会退化, 归并和堆排序不会退化。
T2.考察栈的常规操作,挨个模拟一下就好。
T3.希尔排序是什么?这题选D。
T4.QAQFortran不是面向对象的!!!!!!!!!!!!!!!!!!!!!!!
T5.GTMD王选,出题人你给我出来。这题选BD。
问题求解
T1.变换格子,看起来没法下手其实挺简单,瞎jb试试就知道是3步,不可能会有比3步更优的算法了。
T2.传说中的最小割。最小代价是4,挨个试总能试出来。不同的方案数其实我也是查的,少查了两种情况。。
读程
T1.一道常规递归题,woc这我也做错了。。。我菜爆了我退群吧。。。直接多算了一个10。。。。答案是15.
T2. 鬼知道这是http://www.cnblogs.com/OIerShawnZhou/p/7449299.html
T3.第三题是归并排序求逆序对,本来这题不该错,因为我初赛之前刚做了一个求逆序对的题。这个答案是8但我查出来是7。。。
结果我数反了。。
T4.好像是数论。。而且据说第二个和第三个的测试数据要循环几十万次。。。woc。。
程序填空
依照惯例,正确的答案我会标成红色。
T1.说好的不考高精度除法呢?说好的这东西不在NOIP范围之内的呢?
没办法,凭着感觉走吧。。。
我真不会这个所以。。分析不出来。。
第一空是p[0] 第二空是 rest< q 第三空是 rest / q 第四空是 rest % q * 10 + p[i] 第五空是 rest % q (我r我居然又写错了)
T2.惊了,这是拓扑排序。
对BFS了然于心的我很快就把这题一遍做出来了。
第一空的用途是记录入度,方便以后查找入度为0的点。能很快想到degree[b]++。
第二空所在的循环是用来把所有开始时入度为0的点入队的,那这个判定条件肯定是判断某个点是不是入度为0,那么就是 degree[i] == 0 了。
第三空就是拓扑排序的主过程了,是一个裸的bfs。这里第三空所处的环境是程序在扩展节点的时候发现一个合法点,后文也明确表示如果这个点的入度变成0就会入队,那应该不难会想到这个空填的应该是“删边”操作,即让这个点的入度-1,那么就是degree[i]--了。
第四空有人看不出来吗?可能有人真的看不出来,要知道bfs每次都是要弹出队首的,但前面的代码没有写这个操作,那自然第四空是需要做这个操作的,否则bfs就结束了。。
让队首+1不就相当于原来那个数弹出来了么?所以head++。
第五空就是去寻找最长路了。自然程序会把求得的答案放在len[a]里,我们要更新ans以便于输出,所以这里的判断条件应该就是,如果当前求得的这个值比ans大,那就让ans更新为这个值。
所以,len[a] > ans 。
47.5分。。。。。应该。。。。不会。。。。出事。。。。吧。。。。吧。。。。吧。。。。
我。。。很。。。慌。。。张。。。啊。。。。