2019暑假杭二day7测试总结

T1

题目大意

\(\sum_{i=1}^n\sum_{j=1}^n\mu(gcd(i,j))\%998244253,n\le 10^{10}\)

sol

\[ \sum_{i=1}^n\sum_{j=1}^n\mu(gcd(i,j))\\ =\sum_{k=1}^n\sum_{i=1}^n\sum_{j=1}^n\mu(k)[gcd(i,j)=k]\\ =\sum_{k=1}^n\mu(k)\sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{k}\rfloor}[gcd(i,j)=1]\\ =\sum_{k=1}^n\mu(k)\sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{k}\rfloor}\sum_{d|i\&d|j}\mu(d)\\ =\sum_{k=1}^n\mu(k)\sum_{d=1}^{\lfloor\frac{n}{k}\rfloor}\mu(d)\sum_{i=1}^{\lfloor\frac{n}{kd}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{kd}\rfloor}\\ 令sum(x)=\sum_{i=1}^n1\\ 则原式=\sum_{k=1}^n\mu(k)\sum_{d=1}^{\lfloor\frac{n}{k}\rfloor}\mu(d)sum({\lfloor\frac{n}{kd}\rfloor})^2\\ 考虑枚举k\times d\\ 原式=\sum_{T=1}^n\sum_{d|T}\mu(d)\mu(\frac{T}{d})sum({\lfloor\frac{n}{kd}\rfloor})^2\\ 令f(x)=\sum_{i|x}\mu(i)\mu(\frac{x}{i})=(\mu*\mu)\\ 原式=\sum_{T=1}^nf(T)sum(\lfloor\frac{n}{T}\rfloor)^2 \]
后面明显可以整除分块,问题变成了如何快速求\(f(x)\)的前缀和,题解说可以用杜教筛,可我就是不会筛\((\mu*\mu)\),只写出了线筛的分。

T2

题目大意

给定一个只包含小写字母的字符串 , 求其本质不同的子序列的个数,\(len \le 10^6,ans\)\(998244353\)取模。

sol

我当时想了一个用tire树维护有多少个子序列,很明显方案数爆炸。

其实正解不需要任何数据结构,十分简单。

考虑递推,设f[i]为前i个字母组成的本质不同的子序列的个数。\(f[i]=2f[i-1]\)。但这会有很多重复的,设\(s_i\)为第i个字母,我们还需减去之前以\(s_i\)结尾的子序列的个数,这些都被重复算了一次。以\(s_i\)结尾的子序列的个数也可以递推,+=f[i]-f[i-1]就行,因为多产生了这么多贡献。

T3

题目大意

请你维护一个初始为空的点的集合,支持以下操作:

  • A x y 加入点 (x,y)
  • Q l r x y 询问点 (x,y) 与第 l 个 r 到个点的匹配度的最大值

点 (x,y) 与 (a,b) 的匹配度为 ax+by

sol

我只写了暴力。

正解把这个问题转为了几何问题,设 ax+by=k ,则 \(-\frac{x}{y}a+\frac{k}{y}=b\),问题变成了给一个斜率固定的直线,过区间内的一些点使截距最小。然后变成了我不会的线段树维护凸壳。

猜你喜欢

转载自www.cnblogs.com/hht2005/p/11402646.html
今日推荐