2020洛谷初赛模拟
78分,有点不是很理想。和去年的成绩相差无几,但是貌似和去年难度相当啊。今年的初赛只选拔200人而不像去年那样水,我有点点危险……
以下是订正
1、运行次数判断
10.在一个初始长度为n的链表中连续进行k次操作,每次操作是读入两个数字aj和bj,在链表中找到元素为aj的结点(假设一定可以找到),然后将bj这个元素插入到这个结点前面。在最理想的情况下,链表访问的结点数量最少可能是多少(不算将要插入的结点)?
A.n次
B.k次
C.nk次
D.n+k 次
注意这里是“最理想的情况”,而不是“平均情况”。
如果问的是平均要多少次,那当然是O(nk)
但是这里是“最理想”,所以就可以任意构造这个初始链表。假设aj就是链表的第一个元素即可。
2、组合数
A班有5名风纪委员,B班有4名风纪委员,C班有3名风纪委员。现在需要这些同学中选取6名风纪委员巡逻,如果只关注各班派出的风纪委员人数,有几种不同的方案?
A.9
B.12
C.15
D.18
考场上遇到这种题,看到数据还算小的话还是手推一下吧!
这次我就直接pass了………………
其实很easy的
1 501 2 510 3 411 4 420 5 402 6 312 7 321 8 330 9 303 10 240 11 231 12 222 13 213 14 141 15 132 16 123 17 042 18 033
over
3、图论基础
14.一个7个顶点的完全图需要至少删掉多少条边才能变为森林?
A.16
B.21
C.15
D.6
先下定义:
图:由点和边构成,可以连通也可以不连通
完全图:点两两之间都有直接的边的图,m=n*(n-1)/2
连通图:每两个点之间都是连通的(直接或者间接有路径可以到达)
树:最基础的连通图,m=n-1
森林:至少一棵树的图(一棵树也是森林!)
所以,就是从一个n=7->m=6*7/2=21的图变成了一个n=7->m=6的树,over
4、虽然这题没错但是我还是想记录一下
5.在一个长度为n的数组中找到第k大的数字,平均的算法时间复杂度最低的是:
A.O(n)
B.O(nk)
C.O(nlogn)
D.O(n^2)
其实每个选项都对应了一种做法,我们倒着讲:
假设原数组是a[1...n]
D:使用o(n^2)的排序,比如冒泡排序,然后输出a[k]即可
C:使用o(nlogn)的排序,比如sort(),然后同上
B:两层循环,依次找出1st,2nd,2rd,4th...(k-1)th,kth大的数即可
A:利用快排的思想,每次在目标的区间内选一个数i,然后把比a[i]小的都放在其左,比a[i]大的都放在其右。判断a[i]在这一次后的位置与k的大小关系,然后选择k所在的那个区间重复进行。时间复杂度:n+n/2+n/4+n/8+.......=2n=O(n)
可以直接用algorithm里面的函数nth_element(a.begin(),a.begin+k,a.end(),<cmp>)才不告诉你呢!
OVER