CCF NOI plus 201(7)6 初赛题 解题报告

时间:2020-12-20 19:34:03

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分。。。。。应该。。。。不会。。。。出事。。。。吧。。。。吧。。。。吧。。。。

我。。。很。。。慌。。。张。。。啊。。。。