8.13

来源:互联网 发布:网络订火车票时间限制 编辑:程序博客网 时间:2024/06/03 20:36

今天又做了一套北京市选的题。

三道题的难度顺序应该是3,2,1.(难道现在流行难度倒序么。。)

第1题:有N道题和M种想法。前M道题每题包含一种想法,后N-M道题分别由任意两题组合成,所包含的想法为两题想法的并集,求N-M道题分别含多少种想法。PS:误差在25%内都可以接受。

看到最后一个条件就觉得正解和概率算法有关,无论自己想不出来。不过并集和二进制的位或很像,果断写了二进制压位拿60分,然后奔下一题去。讲题的时候得知正解果然是屌炸天的随机算法。

第二题:给出N个点和Q个操作,操作分两种类型:1.在两点间加一条边;2.询问一条边两边的点数的乘积。

考试的时候感觉是用某种方法维护size,但是没有想到用什么,就写了个类似旋根的东西。

正解是:先把所有边连起来,然后排dfs序来判断每次连的点中哪个作为父亲,哪个作为儿子。然后进行操作,用并查集来维护各个连通块,用链剖维护size,每个更新这个连通块内所有父亲的值,用倍增找这个连通块内离它最远的父亲。

第三题:给出一个N个点,M条边的图,每个点上都有一个数字,运算序或者小括号,在图上走K步,问有多少种合法的方案,使得走出来的是一个合法的算术表达式。(只考虑语法,不考虑真实计算(0可以作除数),(数字前不能有前导0)

乍一眼看觉得很难,想一会后发现了Dp的模型,这题思维难度是最小的,我在考试时也想到了正解,但代码实现能力不够,导致最后没有写完,最后还是交了暴力上去。

Dp方程;f[i][j][k][l]表示已走i个点,现在在第j个点,左括号比右括号多k个,l为是否有前导0。 的方案数。转移方程分类讨论即可,比较简单。


经验:加强代码实现能力,写程序应该更快一些。

0 0