1 条题解

  • 0
    @ 2022-3-3 12:32:12

    一个比较简单的 dp 题。

    考虑长度从长到短选,那么选长的一定会在中间留下一个空缺,并且这个空缺一定是正中间的,不然左右的无法匹配上。

    考虑中间的长度,那么两边的方案就唯一了,这部分贡献是 i=1n1fi\sum_{i=1}^{n-1} f_i

    然后再考虑没有空缺,那么所有的圆弧长度都一样,容易发现一定是 nn 的因数。

    fi=j=1i1fi+gif_i=\sum_{j=1}^{i-1} f_i +g_i

    gig_i 表示 ii 的因数个数。


    代码
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e6+5,mod=998244353;
    int n,s[N],f[N],sum[N];
    int main(){
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++)
    		for(int j=i;j<=n;j+=i)s[j]++;
    	for(int i=1;i<=n;i++)f[i]=(sum[i-1]+s[i])%mod,sum[i]=(sum[i-1]+f[i])%mod;
    	printf("%d",f[n]);
    }
    
    • 1

    信息

    ID
    85
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者