题目传送门

思路

以下纯考场思路。

今天模拟赛考到了这题的加强版,然后预处理写炸了,\(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的更多相关文章

  1. BZOJ 4421: [Cerc2015] Digit Division

    4421: [Cerc2015] Digit Division Time Limit: 1 Sec  Memory Limit: 512 MBSubmit: 348  Solved: 202[Subm ...

  2. BZOJ 4421: [Cerc2015] Digit Division 排列组合

    4421: [Cerc2015] Digit Division 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4421 Descripti ...

  3. 【BZOJ4421】[Cerc2015] Digit Division 动态规划

    [BZOJ4421][Cerc2015] Digit Division Description 给出一个数字串,现将其分成一个或多个子串,要求分出来的每个子串能Mod M等于0. 将方案数(mod 1 ...

  4. BZOJ4421 : [Cerc2015] Digit Division

    如果两个相邻的串可行,那么它们合并后一定可行,所以求出所有可行的串的个数$t$,则$ans=2^{t-1}$. 注意特判整个串不可行的情况,这个时候答案为0. #include<cstdio&g ...

  5. [CERC2015]Digit Division

    题目描述 We are given a sequence of n decimal digits. The sequence needs to be partitioned into one or m ...

  6. BZOJ 4421: [Cerc2015] Digit Division(思路)

    传送门 解题思路 差点写树套树...可以发现如果几个数都能被\(m\)整除,那么这几个数拼起来也能被\(m\)整除.同理,如果一个数不能被\(m\)整除,那么它无论如何拆,都无法拆成若干个可以被\(m ...

  7. UVALive 7327 Digit Division (模拟)

    Digit Division 题目链接: http://acm.hust.edu.cn/vjudge/contest/127407#problem/D Description We are given ...

  8. Digit Division

    Digit Division Time limit: 1 s Memory limit: 512 MiB We are given a sequence of n decimal digits. Th ...

  9. Digit Division(排列组合+思维)(Gym 101480D )

    题目链接:Central Europe Regional Contest 2015 Zagreb, November 13-15, 2015 D.Digit Division(排列组合+思维) 题解: ...

  10. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

随机推荐

  1. NLP实践!文本语法纠错模型实战,搭建你的贴身语法修改小助手 ⛵

    作者:韩信子@ShowMeAI 深度学习实战系列:https://www.showmeai.tech/tutorials/42 自然语言处理实战系列:https://www.showmeai.tech ...

  2. mysql-DuplicateUpdate和java的threadpool的"死锁"

    大家千万不要被文章的标题给迷惑了,他两在本篇文章是没有关系的, 今天给大家讲讲最近2个有意思的issue,分享一下我学到的 mysql DuplicateUpdate的用法要注意的点 java的thr ...

  3. filter: hue-rotate() 制作炫酷的文字效果

    主要用到属性有: filter 滤镜的 hue-rotate 色调旋转, text-shadow 文字阴影, transform 的 scale缩放, transition 过渡属性, animati ...

  4. JuiceFS CSI Driver 常见问题排查指南

    Kubernetes 作为资源调度和应用编排的开源系统,正在成为云计算和现代 IT 基础架构的通用平台.JuiceFS CSI Driver 实现了容器编排系统的存储接口,使得用户可以在 Kubern ...

  5. week_Last

    Andrew Ng 机器学习笔记 总结! 注:等下用xmind做一个树状图! 来回忆知识! 所以...树状图待补.... 最后,谢谢吴恩达老师!! 感谢吴恩达老师的无私付出!!

  6. python3使用OCR识别图片

    放假三天,闲来无事,想学下python爬虫.本想跟着网上教程操作一遍,奈何安装使用过程中出现一堆问题,并且在网上搜了一堆复制黏贴的答案,关键都不能起作用,最后终于找到一篇生效,为了以后不至于再经历这种 ...

  7. 小型web产品的功能测试要点或测试大纲

    本文参考配置啦:-- Web类产品功能测试大纲,黑盒测试参考测试范围 [官网]:无 应用场景 黑盒测试,功能测试中常常需要考虑很多问题,这里根据本人的工作经验遇到的进行了系列总结.给出了一个常用的测试 ...

  8. 【CTF隐写工具】binwalk工具使用方法

    工具简介 Binwalk 是一种快速.易于使用的工具,用于分析.逆向工程和提取固件映像. 工具环境 Linux Linux环境下安装 直接使用apt/yum进行安装 apt install binwa ...

  9. Zookeeper详解(03) - zookeeper的使用

    Zookeeper详解(03) - zookeeper的使用 ZK客户端命令行操作 命令基本语法 help:显示所有操作命令 ls path:使用 ls 命令来查看当前znode的子节点 -w 监听子 ...

  10. [cocos2d-x]关于CC_CALLBACK

    CC_CALLBACK的代码 // new callbacks based on C++11 #define CC_CALLBACK_0(__selector__,__target__, ...) s ...