SCU 2011 warmup contest 5

哈哈水题什么的最喜欢了

 

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)

 

你可能感兴趣的:(c,问卷调查)