开始刷历年区域赛的题
CCPC2018-Hangzhou B Master of Phi
传送门
积性函数 + 欧拉函数
求(sum_{d|n}phi(d) imes frac{n}{d} mod 998244353)
已知(n = prod_{i = 1}^mp_i^{q_i})带入,
根据公式$$sum_{d|prod_{i = 1}^mp_i^{q_i}} prod_{i = 1}^mp_i^{q_i} = prod_{i = 1}^m(sum_{d|p_i^{q_i}} p_i^{q_i})$$
进行化简就有
(prod_{i = 1}^m(sum_{d|p_i^{q_i}}phi(d)*frac{p_i^{q_i}}{d}))
那么计算每一个(sum_{d|p_i^{q_i}}phi(d)*frac{p_i^{q_i}}{d}),然后乘起来即可
进行化简
(sum_{d|p_i^{q_i}}phi(d)*frac{p_i^{q_i}}{d} = phi(1) * p^q + sum_{i = 1}^q * frac{phi(p^i)*q^q}{p^i})
(=p^q + sum_{i = 1}^q(p - 1)p^{i - 1}frac{p^q}{p^i})
(=p^{q - 1}(p + pq - q))
那么对于每一个p和q,只需要(p^{q - 1}(p + pq - q))即可,最后把m个数字乘起来就是答案
CCPC2018-Hangzhou C Hakase and Nano
博弈论
有两个人轮流取,n堆石头,至少拿一个,最多拿一堆,Hakase进行两次操作,Nano进行一次
d = 1表示Hakase先,否则Nano先
考虑d = 1时,只有n是3的倍数且都是1的话,Hakase必输,因为其他情况,Hakase都可以使得其变成两堆石头,其中1堆是1,另一堆是任意数字,那么Hakase就赢了
考虑d = 2时,将问题转化为Nano怎么取,那么问题就变成了d = 1的情况
如果n%3 = 1,且至少有n - 1个1,那么Nano取走后变成全1,那么就变成了上面的情况。
或者n % 3 = 0,但是又n - 1个1,那么Nano只取走后变成全1,那么就变成了上面的情况
CCPC2018-Hangzhou J Master of GCD
差分 + gcd
传送门
开始序列都是1
区间乘法,乘2或者3
最后求出所有数字的gcd.
然后我直接线段树取模,wa了。
哈哈哈哈,求gcd前不能取模
差分统计2和3出现的个数,然后取最小个数就行了
CCPC2018-Hangzhou L Mod, Xor and Everything
类欧几里得算法 + 异或
和这题很像
(lfloorfrac{n mod i}{2^k} floor mod 2)
(lfloorfrac{n - i * lfloorfrac{n}{i} floor}{2^k} floor mod 2)
但考虑到类欧几里得的系数a和b不能是负数
CCPC2018-Hangzhou
分治NNT + 容斥
2017ACM/ICPC亚洲区沈阳站 - Heron and His Triangle
传送门
三角形三条边是(t-1,t,t+1)
(t≥n)且三角形面积是整数,求最小的t
用海伦公式求出面积,再进行化简,是(x^2-3y^2=1)的形式,暴力求出前几组解,然后用佩尔方程的递推公式求即可
2019 Multi-University Training Contest 5 permutation 1
传送门
定义了一个不同排列,就是(p_i - p_{i - 1}),可以发现,(n, 1, 2,...n - 1)的不同排列是最小的
考虑到(k)是最大(10000),因为(8!)就大于(10000)了,那么如果说(n>8),就是直接对其后(n-1)个数字进行全排列k次即可,从(n,1,2,3...n-1)开始排列
但对于(n<=8),就不符合这个规律了,但可以直接预处理一下,排序得到解