ABC239Ex Dice Product 2

A

题面

ABC239Ex Dice Product 2_第1张图片ABC239Ex Dice Product 2_第2张图片

分析

我们设 f i f_i fi表示当限制m为i的时候期望步数大小
那么可以得到 f 0 = 0 f_0=0 f0=0, f i = 1 + 1 n ∑ j = 1 n f ⌊ i j ⌋ f_i=1+\frac{1}{n} \sum_{j=1}^nf_{\lfloor \frac{i}{j} \rfloor} fi=1+n1j=1nfji
通过记忆化搜索可以得出答案


复杂度为 O ( n 3 4 ) O(n^{\frac{3}{4}}) O(n43),证明方式和杜教筛类似

代码

#include
using namespace std;
typedef long long ll;
#define int long long
const int mod=998244353;
unordered_map <int,int> f;
int n,m;
int qpow(int a,int b)
{
    int res=1;
    while(b)
    {
        if(b&1) res=1ll*res*a%mod;
        a=1ll*a*a%mod;
        b>>=1; 
    }
    return res;
}
int dfs(int x)
{
    if(f.find(x)!=f.end()) return f[x];
    int res=0;
    for(int R=x,L,q;R;R=L)
    {
        q=x/R; L=x/(q+1);
        if(x!=q)
            res+=1ll*dfs(q)*(min(n,R)-min(n,L))%mod;
    }
    return f[x]=1ll*(n+res)%mod*qpow(n-1,mod-2)%mod;
}
signed main()
{
    freopen("a.in","r",stdin);
    freopen("a.out","w",stdout);
    scanf("%lld%lld",&n,&m);
    printf("%lld\n",dfs(m));
    return 0;
}

你可能感兴趣的:(做题记录)