哈哈水题什么的最喜欢了
A:
对n个学生做m个问题的问卷调查,然后统计满足每道题答多少结果的人数
B:
吧4位数中间两位挖出来,求平方,然后反复迭代,进入循环所需要的次数
C:
把数字3位3位逗号隔开
D:
本质上就是求min(d[s][t1]+d[t1][t2],d[s][t2]+d[t2][t1]) 最短路搞定
E:
和FZU 12月月赛某题很像,简单的二维dp,dp[x][y]表示当前操作者在区间[x,y]段最多能比对手多得的分数
(可以为负),然后其实空间可以压缩成线性
F:
有m个询问,针对n个槽,询问给出的是n位二进制的状态,然后里面是1的且正确的个数 也给定
求槽的具体状态,2^n枚举状态,然后m的遍历检查即可
G:
定义树的直径为树上最远点对的距离,给你删k条边,使得最终形成的森林中直径最大的最小
典型的二分,删的边越少,那么树的结构就越大,直径也越大,删边数和最大直径是一个满足单调非递增的关系
二分结果,然后用动态规划来判定,具体做法是dp[i]表示以处理过后的i子树最深的深度
我们对其所有的孩子按dp从小到大排序,设定两个指针i=0,j=top,做一个线性的扫描
若dp[s[i]]+1+dp[s[j]]+1>枚举值,则需要删边了,显然删大的划算,于是j--
否则i++,当整个过程发现删的操作超过了k,则退出
复杂度nlognlogn
H:
裸的SPFA求最短路,并且判断负环
I:
这个后缀数组的好题,哈哈我喜欢,本质上给定A串和B串,不断的从A中找子串,去拼B串
问最少要找子串几次 拼的过程对应着前缀和后缀的匹配关系,于是果断后缀数组
首先连接A+B,做完后缀,然后对于B当前的位置pos,显然能匹配越后面越好
于是每次我们寻找当前B位置下,在A中与其LCA最长的那个,我一开始一直在水,用n^2的枚举
其实这个问题解决起来很简单,对于LCA(i,j)我们其实是在rank[i]和rank[j]之间找一个最小的
所以我们对于当前的pos,其实只要沿着rank往上和往下分别找到第一个是在A串的位置
取大的即可,为什么呢,他们离pos最近啊,如果更远,那么LCA值只会不增大
这个过程只要O(n),于是用dc3 的话,整个过程复杂度O(n)