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

  • 相关阅读:
    手把手教 从0开始搭建vue 脚手架项目
    利用vue.config.js 配置前端模拟接口技巧
    elementUI 穿梭框应用
    process.env.VUE_APP_BASE_API
    springcloud-Eureka组件
    mysql-常用组件之触发器
    mysql-常用组件之定时器
    springboot-整合多数据源配置
    【搞定面试官】- Synchronized如何实现同步?锁优化?(1)
    【搞定面试官】try中有return,finally还会执行吗?
  • 原文地址:https://www.cnblogs.com/luoyugongxi/p/12560184.html
Copyright © 2011-2022 走看看