P4349 [CERC2015]Digit Division
思路
以下纯考场思路。
今天模拟赛考到了这题的加强版,然后预处理写炸了,\(100\) 变成 \(70\),当是给 CSP 攒 rp 了。
首先一眼看到题目可能会没有思路,没什么关系,手推一个暴力 DP,设 \(f_i\) 表示以 \(i\) 为结尾的划分方案数,显而易见的转移是:\(f_i=\sum_{j=1}^{i-1} f_j\),其中满足 \(j\) 至 \(i\) 组成的数满足被 \(m\) 整除。
这个东西似乎难以被优化,所以考虑打几个特殊性质。
若 \(m=3\),显然上述转移柿子满足的条件是 \(\sum_{k=j}^{i} a_k\) 是 \(3\) 的倍数,设原序列的前缀和数组为 \(sum_i\),则此问题等价于 \(sum_i-sum_{j-1}\) 是 \(3\) 的倍数。
不妨根据除 \(3\) 的余数分类,显然 \(sum_i\) 若能它之前的 \(sum_j\) 转移过来必须满足它们除 \(3\) 的余数相同,而我们又可以据此推得若 \(sum_i\) 不是 \(3\) 的倍数,\(f_i\) 无法转移。
为什么呢,设 \(sum_i\) 除三的余数为 \(x\),其中 \(x\) 不为 \(0\),那么 \(x\) 从 \(i\) 之前的 \(x\) 转移过来,如此往前推,必将找到一个点 \(j\),使得 \(j\) 前面不存在除 \(3\) 余数为 \(x\) 的数。
把这个东西推广一下,猜个结论,不难想到若 \(1\) 至 \(i\) 组成的数不是 \(m\) 的倍数,那么无法转移。
这个东西证明也与 \(3\) 的情况类似,不再赘述。
于是前缀和优化一下即可。
代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
int const N=1e6+10;
int const mod=1e9+7;
int sum[N],f[N];
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int n,m;cin>>n>>m;
string s;cin>>s;s=" "+s;
sum[0]=f[0]=1;int res=0;
//这里 res 表示前 i 位除 m 的余数,我们的考试题限制了区间长度只能为 l~r,我没有加上 1~l 的部分,于是挂分,警示后人!
for (int i=1;i<=n;++i){
res*=10;res+=(s[i]-'0');res%=m;
if (!res) f[i]=sum[i-1];
sum[i]=(sum[i-1]+f[i])%mod;
}
cout<<f[n]<<'\n';
return 0;
}
P4349 [CERC2015]Digit Division的更多相关文章
- BZOJ 4421: [Cerc2015] Digit Division
4421: [Cerc2015] Digit Division Time Limit: 1 Sec Memory Limit: 512 MBSubmit: 348 Solved: 202[Subm ...
- BZOJ 4421: [Cerc2015] Digit Division 排列组合
4421: [Cerc2015] Digit Division 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4421 Descripti ...
- 【BZOJ4421】[Cerc2015] Digit Division 动态规划
[BZOJ4421][Cerc2015] Digit Division Description 给出一个数字串,现将其分成一个或多个子串,要求分出来的每个子串能Mod M等于0. 将方案数(mod 1 ...
- BZOJ4421 : [Cerc2015] Digit Division
如果两个相邻的串可行,那么它们合并后一定可行,所以求出所有可行的串的个数$t$,则$ans=2^{t-1}$. 注意特判整个串不可行的情况,这个时候答案为0. #include<cstdio&g ...
- [CERC2015]Digit Division
题目描述 We are given a sequence of n decimal digits. The sequence needs to be partitioned into one or m ...
- BZOJ 4421: [Cerc2015] Digit Division(思路)
传送门 解题思路 差点写树套树...可以发现如果几个数都能被\(m\)整除,那么这几个数拼起来也能被\(m\)整除.同理,如果一个数不能被\(m\)整除,那么它无论如何拆,都无法拆成若干个可以被\(m ...
- UVALive 7327 Digit Division (模拟)
Digit Division 题目链接: http://acm.hust.edu.cn/vjudge/contest/127407#problem/D Description We are given ...
- Digit Division
Digit Division Time limit: 1 s Memory limit: 512 MiB We are given a sequence of n decimal digits. Th ...
- Digit Division(排列组合+思维)(Gym 101480D )
题目链接:Central Europe Regional Contest 2015 Zagreb, November 13-15, 2015 D.Digit Division(排列组合+思维) 题解: ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
随机推荐
- 关于解决scapy.error.Scapy_Exception: tcpdump is not available. Cannot use filter !报错
解决办法 sudo apt install tcpdump 后续 我特意没写到我的 arp 攻击那篇文章里面,就是为了水一片文章
- ssh框架中文保存数据库MySQL乱码
检查后台获取前端页面数据打印到console控制台无乱码:tomcat配置没有问题: 检查MySQL数据库编码设置:字符集:utf8 -- UTF-8 Unicode,排序规则:utf8_genera ...
- Promise知一二
Promise 1.Promise的前置知识 进程(厂房) 程序的运行环境 线程(工人) 线程是实际进行运算的东西 同步 通常情况代码都是自上向下一行一行执行的 前边的代码不执行后边的代码也不会执行 ...
- 配置文件 数据库存储引擎 严格模式 MySQL字段基本数据类型
目录 字符编码与配置文件 \s查看MySQL相关信息 修改配置文件my-default.ini 解决5.6版本字符编码问题 配置文件什么时候加载? 偷懒操作:输入mysql直接登录root账户 数据库 ...
- 大角度非迭代的空间坐标旋转C#实现
1. 绪论 在前面文章中提到空间直角坐标系相互转换,测绘坐标转换时,一般涉及到的情况是:两个直角坐标系的小角度转换.这个就是我们经常在测绘数据处理中,WGS-84坐标系.54北京坐标系.80西安坐标系 ...
- Spark详解(05-1) - SparkCore实战案例
Spark详解(05-1) - SparkCore实战案例 数据准备 1)数据格式 本项目的数据是采集电商网站的用户行为数据,主要包含用户的4种行为:搜索.点击.下单和支付. (1)数据采用_分割字段 ...
- Dubbo架构设计与源码解析(二) 服务注册
作者:黄金 一.Dubbo简介 Dubbo是一款典型的高扩展.高性能.高可用的RPC微服务框架,用于解决微服务架构下的服务治理与通信问题.其核心模块包含 [RPC通信] 和 [服务治理] ,其中服务治 ...
- Maui 读取外部文件显示到Blazor中
Maui 读取外部文件显示到Blazor中 首先在maui blazor中无法直接读取外部文件显示 ,但是可以通过base64去显示 但是由于base64太长可能影响界面卡顿 这个时候我们可以使用bl ...
- 【Dubbo3终极特性】「云原生三中心架构」带你探索Dubbo3体系下的配置中心和元数据中心、注册中心的原理及开发实战(上)
Dubb3的应用级服务发现 Dubbo3提供了全新的应用级服务发现模型,该模型在设计与实现上区别于 Dubbo2 的接口级服务发现模型. 概括来说,Dubbo3 引入的应用级服务发现主要有以下优势 适 ...
- Adversarial Active Learning based Heterogeneous GNN for Fake news Detection-ICDM20
一.摘要 假新闻的爆炸性增长,以及对政治.经济和公共安全的破坏性影响,增加了对假新闻检测的需求.社交媒体上的假新闻并不是以文章的形式独立存在的.许多其他实体,如新闻创造者.新闻主题等,都存在于社交媒体 ...