t1
(t)组数据,(inf(s))表示字符串s的无限重复。比较(inf(a))和(inf(b))。
(|a|,|b|<=10^5,t<=10)
直接把(a)和(b)扩大二倍然后把短的重复对齐到长的比较即可。
(std)做法:比较(a+b)和(b+a)。
t2
给出(n,m)。问可以构造出多少序列(x)满足:
(sqrt{x_1}+sqrt{x_2}+...+sqrt{x_n}=sqrt{m})
求方案数模(1e9+7).
先把(sqrt{m})提出最大的系数k,使其根号下剩的数不能表示成(sqrt{x}+sqrt{x})的形式。
提k的方法:枚举完全平方数,判断m可以整除的最大ii,提出i。
或者质因数分解,若cnt>=2将k=i*cnt/2。
然后问题转化成经典问题:
k个相同的球,放进n个不同盒子,可以有空盒的方案数。
(C^{n-1}_{n+k-1})
组合数的(O(n))求法:先预处理出阶乘,然后直接带入组合数公式,注意除法取模要求逆元。