题目链接:点击查看

题目大意:给出一个 n ,表示出 0 ~ 10^n - 1 内的所有整数,且用前导零补齐,即所有的数长度都为 n ,规定连续的且数值相同的一段称为block,现在问对于每个 i ∈ [ 1 , n ] ,10^n 个数中共有多少个长度为 i 的 block

题目分析:比较简单的一道组合数学题目,分情况讨论一下就好了:

  1. i == n:显然答案只有十种情况
  2. i < n:考虑答案在两头的情况,即连续的block为橙色的部分:00000 或 00000,此时的答案为10*9*2*10^(n-i-1)
    1. 10是橙色部分的取值范围
    2. 9是与橙色部分相邻的首个黑色数字的取值范围
    3. 2是橙色部分在左侧或右侧两种情况
    4. 10^(n-i-1)是其余黑色部分的取值范围
  3. i < n - 1:考虑答案不在两头的情况,即连续的block为橙色部分:00000 00000 等等,此时答案为10*(n-i-1)*9*9*10^(n-i-2)
    1. 10是橙色部分的取值范围
    2. (n-i-1)是橙色部分通过平移,可以在不同位置有(n-i-1)种情况,如上面 i = 2,n = 5 时,就有 5 - 2 - 1 = 2 (种)情况
    3. 9是橙色部分左侧的第一个黑色数字的取值范围
    4. 9是橙色部分右侧的第一个黑色数字的取值范围
    5. 10^(n-i-2)是其余黑色部分的取值范围

然后配合快速幂实现就好了

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=2e5+100;const int mod=998244353;LL q_pow(LL a,LL b)
{LL ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod;b>>=1;}return ans;
}int main()
{
#ifndef ONLINE_JUDGE
//  freopen("input.txt","r",stdin);
//  freopen("output.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);int n;scanf("%d",&n);for(int i=1;i<=n;i++){LL ans=0;if(i==n)ans=10;if(i<n)//在两头的情况ans=(ans+10*9*2*q_pow(10,n-i-1))%mod;if(i<n-1)//不在两头的情况ans=(ans+10*(n-i-1)*9*9*q_pow(10,n-i-2))%mod;printf("%lld ",ans);}return 0;
}

CodeForces - 1327E Count The Blocks(组合数学)相关推荐

  1. [codeforces 1327E] Count The Blocks 打表找规律+根据规律找公式+优化公式

    Educational Codeforces Round 84 (Rated for Div. 2)   比赛人数13522 [codeforces 1327E]  Count The Blocks  ...

  2. CodeForces - 1312D Count the Arrays(组合数学)

    题目链接:点击查看 题目大意:给出一个 n 和 m ,求满足条件的数组有多少个 数组包含 n 个元素 每个元素的取值为 1 ~ m 包含且仅包含一对相同的元素 存在一个位置 pos ,使得 [ 1 , ...

  3. Codeforces 1327 E. Count The Blocks(递推找规律)

    题意: 给出一个 n n n,求 1 0 n 10^n 10n 内长度为 1 1 1到 n n n的块分别有多少个.块的含义是连续相同数字的长度. 第一眼以为数位 d p dp dp 暴力打表出前几项 ...

  4. D - Yet Another Problem On a Subsequence CodeForces - 1000D (DP,组合数学)

    D - Yet Another Problem On a Subsequence CodeForces - 1000D The sequence of integers a1,a2,-,aka1,a2 ...

  5. Codeforces - 466C - Number of Ways - 组合数学

    https://codeforces.com/problemset/problem/466/C 要把数据分为均等的非空的三组,那么每次确定第二个分割点的时候把(除此之外的)第一个分割点的数目加上就可以 ...

  6. CodeForces - 1330D Dreamoon Likes Sequences(组合数学)

    题目链接:点击查看 题目大意:给出一个限制 d 与模数 mod ,求出可以构造出的满足条件的数组 a 的个数,需要满足以下条件: 数组 a 的长度大于等于 1 数组 a 严格递增 数组 a 的最小值大 ...

  7. codeforces 869C The Intriguing Obsession 组合数学,逆元

    codeforces 869C The Intriguing Obsession 题意 在三种颜色的群岛之间建造桥梁,每一种颜色分别有a,b,c 限制条件 1 相同颜色的岛之间的距离 d >= ...

  8. CodeForces - 1355C Count Triangles(数学)

    题目链接:点击查看 题目大意:给出 A B C D ,规定 A <= x <= B <= y <= C <= z <= D ,问 ( x , y , z ) 三元组 ...

  9. CodeForces - 1323B Count Subrectangles(思维)

    题目链接:点击查看 题目大意:给出一个数组 a 和数组 b 只由 0 和 1 构成,构造出矩阵 maze[ x ][ y ] = a[ x ] * b[ y ],显然maze矩阵同样只由 0 和 1 ...

最新文章

  1. 2020-09-20C++学习笔记之与C语言对比1
  2. 最新数据:一图看清全球393家独角兽公司
  3. Python学习---协程 1226
  4. wxWidgets:wxWebViewEvent类用法
  5. CodeForces - 1330E Drazil Likes Heap(贪心)
  6. rpm方式安装MySQL5.1.73
  7. oracle创建、删除索引等操作
  8. android绘制论文,基于Android平台的三维地形绘制研究与实现
  9. Mr.J-- jQuery学习笔记(一)--初入jQuery
  10. MySQL5.6 数据库主从(Master/Slave)同步安装与配置详解
  11. Java™ 教程(不可变对象)
  12. TP5.x——update更新成功但是返回是0
  13. iOS新的旅程之Swift语言的学习
  14. oracle optimizer_index_cost_adj,OPTIMIZER_INDEX_COST_ADJ与成本计算
  15. 关于Redis雪崩原因和解决方法终于搞懂了
  16. vs编译log4cpp代码,函数“int snprintf(char *const,const std::size_t,const char *const,...)”已有主体
  17. 嘴里又苦又干,还有异味
  18. Centos7 双网卡配置
  19. Java(一)——环境配置及相关软件的安装
  20. /etc/hosts.allow和/etc/hosts.deny的讲解

热门文章

  1. Nginx中Gzip压缩功能的实例配置
  2. 微服务一定要使用Spring-Cloud吗?
  3. 什么是顺序一致性呢?
  4. J.U.C 提供的阻塞队列
  5. 通过一个图来简单描述一下 socket 链接建立以及通信的模型
  6. SpringMVC的请求-文件上传-单文件上传的代码实现1
  7. MybatisPlus入门案例
  8. Spring Cloud Context
  9. 使用 GraalVM 将纯 JavaFX 项目打包成 EXE
  10. Cortex-M3-指针和野指针