省选模拟37

A. 奶酪

  这个东西做法应该很多。

  我的做法是,直径合并,在dfs序上处理出来前后缀的直径和两个端点,询问的时候直接合并两段前缀和后缀即可。

  换根dp也是可以的,然而要记录最大值,次大值,次次大值,所以就比较恶心。

  题解的做法是,根据删掉的这条边是否在直径上进行讨论,假如不在,那么一段的答案就是直径,另一段做简单树形dp。

  否则似乎是类似的做法?

B. 走

  一眼可以发现对于第二个串的转移是单调的,第一个串的转移图用kmp可以简单预处理出来。

  所以现在的问题就是第一个串的转移图中的环应该怎么处理。

  发现数据范围很小,直接暴力高斯消元就行了。

C. 机

  记几个东西:

  判断一个数是否是偶数可以用$(-1)^x$来判断。

  stein算法:处理很大数最大公约数的方法,就是每次将两个数中所有的2去掉,然后两个数都是奇数时,使用$gcd(x,y)=gcd(x-y,y)$,这样一定会再次出现2的幂次,一直消掉就可以了。复杂度和辗转相除是一样的,但是在需要高精度的时候由于不用取模效率很高。

  假如需要打表但是在打出来的表上效率很低的时候,可以考虑压一压数据,比如建出来一棵搜索树。

  加法转化为原根的乘法。

原文地址:https://www.cnblogs.com/hzoi-cbx/p/12416424.html