E. Count The Blocks
E. Count The Blocks
这是一个计数题,又把我卡自闭了。。。之前也碰到过类似的题目,这次居然还没有写出来,感觉自己还是太菜了,加油补题吧。
题目大意:
给你一个数字 \(n\),代表的是数的长度,该数可以有前导零,定义连续相同的数可以组成一个块,如果有 \(x\) 个连续相同的数,则认为这个块大小是 \(x\)。
问:有n个数字的这个数,可以组成大小为 \(i\) 的块的数量是多少。
答案输出一行 \(n\) 个数,第 \(i\) 个数表示大小为 \(i\) 的块的数量。
题解:
这种题目就很容易把自己绕进去,所以我们不要每一个去仔细推,而是思考:我要构造大小为 \(i\) 的块,应该如何去构造。
是不是选一块大小为 \(i\) 的块,然后这个块如果在中间,则两边的数字应该不同,其他的块则无所谓,如果在边界,则只要满足一边的数字和这个块不同即可,然后统计答案。
这个会不会出现重复呢?或者会不会少统计了呢?
这两个看起来有矛盾的提问,其实就解决了这两个问题。
因为我每一个位置只统计了一次,但是可能我假设的这个位置出现大小为 \(i\) 的块不止一个,所以才会有疑问会不会少统计了。
同时因为每一个位置都统计了一次,所以可能会有两个位置,出现大小为 \(i\) 的块的数量及位置都相同,所以才会有疑问会不会重复统计了。
确实有可能会出现 \(x\) 个位置,此时出现大小为 \(i\) 的块的数量及位置都相同,但是每一次我只统计了一次,并没有乘以 \(x\) 这个数,所以不会重复,也不会丢掉一些数。
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
#define inf64 0x3f3f3f3f3f3f3f3f
using namespace std;
const int maxn=2e5+10;
const int mod=998244353;
typedef long long ll;
ll dp[maxn];
ll binpow(ll x,ll n){
ll ans=1;
while(n){
if(n&1) ans=(ans*x)%mod;
x=(x*x)%mod;
n>>=1;
}
return ans;
}
int main(){
int n;
scanf("%d",&n);
dp[n]=10,dp[n-1]=180;
for(int i=n-2;i>=1;i--){
dp[i]=10*9*binpow(10,n-i-1)%mod*2%mod;
// printf("dp[%d]=%lld\n",i,dp[i]);
}
for(int i=n-2;i>=1;i--){
dp[i]=(dp[i]+10*9*9*binpow(10,n-i-2)%mod*(n-i-1)%mod)%mod;
}
for(int i=1;i<=n;i++) printf("%lld ",dp[i]);
return 0;
}
E. Count The Blocks的更多相关文章
- Educational Codeforces Round 84 E. Count The Blocks
传送门: 1327- E. Count The Blocks 题意:给你一个整数n,求10^n内(每个数有前导零)长度为1到n的块分别有多少个.块的含义是连续相同数字的长度. 题解:从n=1开始枚举 ...
- E. Count The Blocks(找数学规律)
\(\color{Red}{先说一下自己的歪解(找规律)}\) \(n=1是答案是10\) \(n=2时答案是180\) \(n=3时模拟一下,很容易发现答案是2610\ \ 180\ \ 10\) ...
- 分区里的inode号是0号和1号的block
分区里的inode号是0号和1号的block 我相信大家在使用Linux的时候都遇到过误删文件系统数据的情况,不管是自己误删还是帮人家恢复误删 现在用的比较多的恢复工具大概是ext3grep .ext ...
- 81 dumpe2fs-打印“ext2/ext3”文件系统的超级块和快组信息
dumpe2fs打印"ext2/ext3"文件系统的超级块和快组信息. 语法 dumpe2fs (选项) (参数) 选项 -b:打印文件系统中预留的块信息: -ob<超级块& ...
- 11g新特性-查询缓存(1)
众所周知,访问内存比访问硬盘快得多,除非硬盘体系发生革命性的改变.可以说缓存在Oracle里面无处不在,结果集缓存(Result Cache)是Oracle Database 11g新引入的功能,引入 ...
- Linux下误删除后的恢复操作(ext3/ext4)
Linux是作为一个多用户.多任务的操作系统,文件一旦被删除是难以恢复的.尽管删除命令只是在文件节点中作删除标记,并不真正清除文件内容,但是其他用户和一些有写盘动作的进程会很快覆盖这些数据.在日常工程 ...
- Linux磁盘及文件系统管理
在LINUX中我们知道一个很重要的概念,那就是"一切皆文件",这里的一切表示所有在LINUX系统的对象,自然也包括了LINUX中的硬盘设备.在LINUX中所有设备都被抽象成一个文件 ...
- Linux系统排查3——I/O篇
当磁盘无法写入的时候,一般有以下可能: 文件系统只读 磁盘已满 I节点使用完 一. 遇到只读的文件系统 文件系统自动设置成只读可能是系统自我保护的一种机制,因此需要实现弄清究竟是什么原因造成了文件系统 ...
- 《你不常用的c#之一》:略谈unsafe
转自csdn:http://blog.csdn.net/robingaoxb/article/details/6199508 msdn里讲到: “在 C# 中很少需要使用指针,但仍有一些需要使用的情况 ...
随机推荐
- logback日志实战
<?xml version="1.0" encoding="UTF-8" ?> <!-- <configuration> < ...
- 列表推导式和seed()的理解
Table of Contents generated with DocToc 列表推导式和seed()的理解 对seed()的理解 列表推导式 第一种用法 第二种用法 列表推导式和seed()的理解 ...
- Mac 下 brew 切换为国内源
简介 Homebrew 是一款自由及开放源代码的软件包管理系统,用以简化 macOS 和 linux 系统上的软件安装过程.它拥有安装.卸载.更新.查看.搜索等很多实用的功能,通过简单的一条指令,就可 ...
- Unity 随机地图房间通道生成
之前的博客中已经说了随机房间生成: https://www.cnblogs.com/koshio0219/p/12604383.html 但实现房间生成只是整个地图生成最初最简单的一步.下面讨论如何随 ...
- 小程序—银行、券商们下一代APP的进阶方向
传统金融机构们的App——尤其以手机银行.手机证券为最,发展到今天,已经产生一系列的问题:从用户角度看,体验普遍不好.高度同质化:从业务运营角度看,几乎没有什么“运营”的抓手:从IT角度看,投入产出比 ...
- 8行代码帮你python建立UDP通信
首先我们要搭建一个UDP通信,首先我们就要知道什么UDP: UDP用户数据报传输协议,它位于TCP/IP协议的传输层,是一种无连接的协议,它发送的报文不能确定是否完整地到达了另外一端.UDP广泛应用于 ...
- stand up meeting 12/28/2015
part 组员 今日工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云 解决生词本显示[阅读页面]的滑动条和PDF的滑动条冲突 ...
- pytorch GPU训练好的模型使用CPU加载
torch.load('tensors.pt') # 把所有的张量加载到CPU中 torch.load('tensors.pt', map_location=lambda storage, loc: ...
- [函数] PHP取二进制文件头快速判断文件类型
一般我们都是按照文件扩展名来判断文件类型,但其实不太靠谱,因为可以通过修改扩展名来伪装文件类型.其实我们可以通过读取文件信息来识别,比如 PHP扩展中提供了类似 exif_imagetype 这样的函 ...
- php下载各种编辑器输出的内容到word中展示
<?php/** * Created by PhpStorm. * User: 工作 * Date: 2018/1/11 * Time: 12:02 */ //连接数据库$dsn = " ...