首页 > 其他 > 详细

ARC071F Infinite Sequence

时间:2020-05-03 18:00:01      阅读:42      评论:0      收藏:0      [点我收藏+]

Link
若存在两个不为\(1\)且相邻的数,那么后面的数都会相等。
那么设\(f_i\)表示填\([i,n]\)位置的方案数,边界为\(f_n=n,f_{n-1}=n^2\)
考虑如何进行转移。
\(\text{1:}\)填一个\(x(x\in(1,n-i])\)然后后面接\(x\)\(1\),即\(f_i\leftarrow\sum\limits_{j=i+3}^n f_j\)
\(\text{2:}\)填一个\(x(x\in(n-i,n])\)然后后面接\(n-i\)\(1\),即\(f_i\leftarrow i+1\)
\(\text{3:}\)只填一个\(1\),即\(f_i\leftarrow f_{i+1}\)
\(\text{4:}\)在第\(i\)\(i+1\)位填两个大于\(1\)的数,即\(f_i\leftarrow(n-1)^2\)
最后的答案就是\(f_1\)

#include<cstdio>
int n,f[1000007],P=1000000007;
int main()
{
    scanf("%d",&n),f[n]=n,f[n-1]=1ll*n*n%P;
    for(int i=n-2,s=0;i>0;--i) (s+=f[i+3])%=P,f[i]=(f[i+1]+1ll*(n-1)*(n-1)+s+i+1)%P;
    printf("%d",f[1]);
}

ARC071F Infinite Sequence

原文:https://www.cnblogs.com/cjoierShiina-Mashiro/p/12822356.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!