zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 84 (Rated for Div. 2) E

    题意:

    给一个数字n,意味着长度为n得一个数列,每个位置上可以是0~9任何一个数,这些任意的数中有多少片段数字是相同的,统计相同数字段会出现多少种

    n为11的话,其中一串数字00027734000,有000,000,这样两个长度为3的数字段,77这样长度为2的数字段,2,3,4这样长度为1的数字段

    输出,n个数字分别表示第 i 个整数等于长度为 i 的数量

    思路:

    用这张图表示很清楚了

    所以 特判第一个和第二个10和180之后

    o在两侧,只会出现两次,所以是2*9*ksm(10,n-len);

    在【】【】之间会出现n-len-1,所以是(n-len-1)*81*ksm(10,n-len-1);

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define ull unsigned long long
    #define il inline
    #define it register int
    #define inf 0x3f3f3f3f
    #define lowbit(x) (x)&(-x)
    #define pii pair<int,int>
    #define mak(n,m) make_pair(n,m)
    #define mem(a,b) memset(a,b,sizeof(a))
    #define mod 998244353
    #define fi first
    #define se second
    #define sz(x) (int)(x).size()
    #define all(x) (x).begin(), (x).end()
    const int maxn=2e5+10;
    ll ksm(ll a,ll b){
        if(b<0)
            return 0;
        ll ans=1;
        while(b){
            if(b&1)
                ans=ans*a%mod;
            a=a*a%mod;
            b>>=1;
        }
        return ans;
    }
    ll a[maxn],n;
    int main(){
        scanf("%lld",&n);
        a[n]=10;a[n-1]=180;
        for(it i=1;i<=n-2;i++){
            ll z=(ll)(n-i);a[i]=((z-1)*810*(ksm((ll)10,z-2))%mod)%mod;
            a[i]+=(180*(ksm((ll)10,z-1))%mod)%mod;
            a[i]%=mod;
        }
        for(it i=1;i<=n;i++){
            printf(i==n?"%lld
    ":"%lld ",a[i]);
        }
        return 0;
    }

    这场打得不好,E题没有看过,C题机翻出了大问题,导致用bfs,赛后感觉自己像nt

  • 相关阅读:
    java.sql.SQLException: 数据大小超出此类型的最大值
    日志收集系统 ELK
    centos下mysql 数据库安装、调试
    Log4j应用
    使用webuploader实现大文件断点续传(前端部分)
    es6学习 -- 解构赋值
    es6学习 -- let和const
    关于禁止页面滚动的实践(禁止滚轮事件)
    匿名函数与闭包
    JS高级学习总结--面向对象
  • 原文地址:https://www.cnblogs.com/luoyugongxi/p/12560184.html
Copyright © 2011-2022 走看看