P4349 [CERC2015]Digit Division
思路
以下纯考场思路。
今天模拟赛考到了这题的加强版,然后预处理写炸了,
首先一眼看到题目可能会没有思路,没什么关系,手推一个暴力 DP,设
这个东西似乎难以被优化,所以考虑打几个特殊性质。
若
不妨根据除
为什么呢,设
把这个东西推广一下,猜个结论,不难想到若
这个东西证明也与
于是前缀和优化一下即可。
代码
#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;
}
本文作者:Tx_Lcy
本文链接:https://www.cnblogs.com/tx-lcy/p/16833361.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步