Educational Codeforces Round 84 (Rated for Div. 2) E

E. Count The Blocks

我们注意他不是一个数里面选出一个来这种很恶心的
这种计数不管该数里有啥其他的我们只需要构造一定有这一种的就可以了
我们设当前我们要的是长度为len都相同的数字
这个长度为len的段可以放置的位置有n-len+1个
我们分类讨论:
要是他放在头和尾 就是前面没有数和后面没有数的情况
我们只需要相邻的一个数不和这一段相同就满足了
10(这个段是什么数)9(相邻不和她相同)2(头尾两种)10^(n-len-1)[还剩的位置可以随意选择]
要是他放在中间 就有n-len-1个位置可以放
10(这个段是什么数)
9(相邻不和她相同)9(相邻不和她相同)10^(n-len-2)[还剩的位置可以随意选择]
然后我们特判len==n的情况就可以了

int s[N];
void solve(){
    s[0]=1;
    int n;cin>>n;
    for(int i=1;i<=n;i++)s[i]=s[i-1]*10%mod;
    for(int len=1;len<=n;len++){
        if(len==n)cout<<10<<endl;
        else cout<<(81ll*s[n-len-1]%mod*(n-len-1)%mod+18ll*s[n-len]%mod)%mod<<endl;
    }
}
posted @ 2022-10-31 20:06  ycllz  阅读(19)  评论(0)    收藏  举报