2023.11.2

发布时间 2023-11-02 15:16:26作者: SError

o.O ?


B

\(\{a_n\}\) 中选出若干数使得两两的乘积不为完全立方数。

\(n\le 10^5\)\(1\le a_i\le 10^{10}\),TL=1s.


如果其有一个 \(>10^5\) 的质因子一定对答案有贡献。

考虑其余的数,先令它们除去所有非 \(1\) 的完全立方因子。

若有多个 \(1\),只有一个对答案有贡献。否则一个数对应着一个唯一的数,从两个里选择出现次数最大的那个。

ll Pollard_Rho(ll n){
	if(!(n&1))return 2;
	ll d,x,y,c;
	while(true){
		d=1;
		for(int i=1;i<=128;i<<=1){
			x=0,y=0,c=rd()%(n-1)+1;
			for(int j=1;j<=i;j++){
				x=f(f(x,c,n),c,n),y=f(y,c,n);
				d=mul(d,abs(x-y),n);
			}
			if(__gcd(d,n)!=1)return __gcd(d,n);
		}
	}
}

非常好 Pollard-Rho,这使我的旋转。


C

给定串 \(s\),每次问 \(t\)\(s\) 中的出现次数,强制在线。

\(|s|,q,|t|,\sum |t|\le 10^5\)\(|\Sigma|=10^6\).


\(\sum |t|\) 很小,考虑对所有询问串的长度的出现次数分治。小的暴力 kmp,大的哈希。

最劣也就是 \(O(n\sqrt{n}\log n)\) 小常数。


D

给出长 \(n\) 的排列 \(S,G\) 和数 \(k\).

对于 \(i\in[n-k+1,n]\),可以将 \(G[i:n]\) 随机打乱,最大化如下区间 \([l,r]\) 的个数:

  • 存在 \(S[x:y]\) 重排后与 \(G[l:r]\) 相同。

\(k\le n\le 2\times 10^5\).