T1
原题是 HDU 的 Frog
是一道容斥的题,但是考试的时候想到了大概的做法但是卡在了容斥,并且没有最后时间了所以所以就写了个20分暴力则啧啧难受
首先根据某一个点 X 能够被占领一定满足:X = a [ i ] * q - p * M,所以根据扩展欧几里得的有解性质 X 必须是 a [ i ] 和 M 的倍数,由于较大的 X1 会被较小的 X2 所计算,所以我们要找的最小的 X0 就是 Gcd(a [ i ],M),所以我们首先保存一下每一个 a 与 M 的 Gcd 就好了!
那么所有能够被占据的点一定是一个以 M 结尾的等差数列啦,一共有 M / Gcd + 1 这么多个(小学奥数),总和是 M * (M / Gcd + 1)(小学奥数),还要减去 M 因为 M 点永远不可能被占领!
但是有些 Gcd 是没有用的啊,因为如果有更小的 Gcd ' 并且 Gcd ' 是 Gcd 的因子,那么 Gcd ' 一定可以计算到 Gcd 所占领的所有地方,那么 Gcd 可以滚了
用一个数组 q 存储所有有用的 Gcd,每次遇到一个 Gcd 和队列里的一定有用的 Gcd 比较看看当前的 Gcd 何去何从就好了
容斥是大问题
由于有用的 Gcd 最多只有10多个,那么可以直接状压或者 Dfs 容斥就好了,奇加偶减(因为 Gcd 的 Lcm 是会重复的)
T2
数位 Dp 的水题,(最开始没有识别出来想了好久看复杂度以为是快速幂 qwq)……
T3
考场上没时间了 T2 耗了太久(虽然做出来了不亏)导致 20 暴力写得太快了,居然错了…… 直接掉了 3 个 Rk(150 的 3 个 www),但是差不多有些思路是对的,比如想到了合并横纵的贡献,没有时间想 www ……
可以发现其他行对于某一行的所有点的贡献都是一样的,与处理一下就好了 ……