先搞了一波字符串,是时候到数论了。

2019.4.11

CF1070A Find a Number

用(i,j)表示数字和为i,余数为j的最短路,那么就是(0,0)到(s,0)的最短路。由于边权为1,直接bfs即可。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

代码就不写了。

CF1109E Sasha and a Very Easy Test

显然可以线段树,主要问题在于模数不为质数,可能不存在逆元。

那么可以把模数质因数分解一下,所有a除掉不互质的部分分别搞,剩下的就可以exgcd求逆元了。

exgcd写错调了半年……

CF1034C Region Separation

感觉好神仙啊……是我太菜了吗?

考虑如何判断分成k份是否可行。每一份权值和都是S/k,那么可以一个简单的dfs搞定:每次子树积到S/k就断开,看是否可行。

分析一下,可以看有多少个节点子树权值和为S/k的倍数,如果恰好有k个就可行。

又因为\(\frac{S}{k}|x\Leftrightarrow \frac{S}{\gcd(x,S)}|k\),所以可以直接\(O(n\ln n)\)统计。

然后发现一个重要性质:若分\(t\)次,第\(t\)次分成了\(k_t\)份,那么当且仅当\(k_{t-1}|k_t\)时成立,且方法唯一。

所以再一次\(O(n\ln n)\)\(dp_{xk}+=dp_k​\)即可。

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄