BZOJ4277 : [ONTAK2015]Cięcie
假设分成如下三段:
[1..i][i+1..j][j+1..n]
考虑中间那一段,设f[i]为前i位组成的数模q的值,pow[i]为$10^i$模q的值,那么有:
f[j]-f[i]*pow[j-i]=0
f[j]*pow[i]=f[i]*pow[j]
f[j]*inv(pow[j])=f[i]*inv(pow[i])
枚举i,j,若[j+1..n]是r的倍数,[1..i]是p的倍数,且f[j]*inv(pow[j])=f[i]*inv(pow[i])则可行。
注意特判前导零的情况,时间复杂度$O(n)$。
#include<cstdio>
#define N 1000010
int n,p,q,r,i,t,can1[N],can3[N],pow[N],f[N],inv[N],c[N];char a[N];long long ans;
int main(){
scanf("%d%d%d%d%s",&n,&p,&q,&r,a+1);
for(i=1;i<=n;i++)a[i]-='0';
for(i=1;i<=n;i++){
t=(t*10+a[i])%p;
if(!t&&(i==1||a[1]))can1[i]=1;
}
for(pow[0]=i=1;i<=n;i++)pow[i]=pow[i-1]*10%r;
for(t=0,i=n;i;i--){
t=(t+pow[n-i]*a[i])%r;
if(!t&&(i==n||a[i]))can3[i]=1;
}
for(pow[0]=i=1;i<=n;i++)pow[i]=pow[i-1]*10%q,f[i]=(f[i-1]*10+a[i])%q;
for(inv[1]=1,i=2;i<q;i++)inv[i]=1LL*(q-inv[q%i])*(q/i)%q;
for(i=1;i<=n;i++)f[i]=1LL*f[i]*inv[pow[i]]%q;
for(i=2;i<n;i++){
if(can3[i+1]){
if(can1[i-1]&&!a[i])ans++;
ans+=c[f[i]];
}
if(can1[i-1]&&a[i])c[f[i-1]]++;
}
return printf("%lld",ans),0;
}
BZOJ4277 : [ONTAK2015]Cięcie的更多相关文章
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 4276: [ONTAK2015]Bajtman i Okrągły Robin
4276: [ONTAK2015]Bajtman i Okrągły Robin Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 345 Solved ...
- Travis CI用来持续集成你的项目
这里持续集成基于GitHub搭建的博客为项目 工具: zqz@ubuntu:~$ node --version v4.2.6 zqz@ubuntu:~$ git --version git versi ...
- CI Weekly #10 | 2017 DevOps 趋势预测
2016 年的最后几个工作日,我们对 flow.ci Android & iOS 项目做了一些优化与修复: iOS 镜像 cocoapods 版本更新: fir iOS上传插件时间问题修复: ...
- CI Weekly #9 | 揭秘阿里 Docker 化实践之路
2017年悄然而至,对 flow.ci 你有什么新的期待呢?新的一年,flow.ci会越来越强大好用,希望继续得到你的支持与反馈.最近,我们做了如下的「功能优化」与「问题修复」,看看有没有你想要的: ...
- CI Weekly #8 | CI/CD 技能进阶路线
在使用 flow.ci 进行持续集成的过程中,也许你会遇到一些小麻烦.最近我们整理了一些常见问题在 flow.ci 文档之 FAQ,希望对你有用.如果你遇到其他问题,也可以通过「在线消息」或去 Git ...
- CI Weekly #7 | Instgram/Quora 等大公司如何做持续部署?
终于,你们期待的 flow.ci iOS 项目持续集成 开始公测了.在这几个工作日, flow.ci 做了些许「功能优化」与「问题修复」,性能和体验都在持续优化中.比如: iOS 快速入门文档更新: ...
- CI Weekly #6 | 再谈 Docker / CI / CD 实践经验
CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成.持续交付,持续部署.自动化测试. DevOps 等实践教程.工具与资源,以及一些工程师文化相关的程序员 Ti ...
- CI Weekly #5 | 微服务架构下的持续部署与交付
CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成.持续交付,持续部署.自动化测试. DevOps 等实践教程.工具与资源,以及一些工程师文化相关的程序员 Ti ...
随机推荐
- nodemon:让node自动重启
nodemon:服务器自动重启工具 当我们修改代码时,node必须要手动重启,但可以按照nodemon. npm install -g nodemon 安装完 nodemon 后,就可以用 nodem ...
- Nginx配置项优化(转载)
(1)nginx运行工作进程个数,一般设置cpu的核心或者核心数x2 如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/proc/cpuinfo文件 grep ^processor / ...
- Internet Explorer 6 的15个讨厌的bug和简单的解决方法
关于bug更全的,我推荐去这个网站hasLayout,整理的非常全!三年前就看了,最近手生,又翻出来看看~~虽然上面有很多bug讲解,但是我觉得目前用的比较多或者说是常见的应该属下面这篇文章,15 a ...
- 20155314 2016-2017-2 《Java程序设计》第7周学习总结
20155314 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 了解Lambda语法 了解方法引用 了解Fucntional与Stream API 掌握Da ...
- laravel一个页面两个表格分页处理
关键是看懂laravel自带的 paginate() 方法. 在Builder.php文件(项目名称/laravel/vendor/laravel/framework/src/Illuminate/D ...
- unbind()清除指定元素绑定效果
定义和用法 unbind() 方法移除被选元素的事件处理程序. 该方法能够移除所有的或被选的事件处理程序,或者当事件发生时终止指定函数的运行. ubind() 适用于任何通过 jQuery 附加的事件 ...
- HDU 4627 The Unsolvable Problem 杭电多校联赛第三场1009 数学题
题意描述:给出一个n,要求在所有满足n = a+b的a和b里面求a和b的最小公倍数最大的两个数的最小公倍数. 解题报告:比赛的时候看到这个题的第一反应就是寻找这两个数一定是在a和b比较接近的地方找,这 ...
- tensorflow随机张量创建
TensorFlow 有几个操作用来创建不同分布的随机张量.注意随机操作是有状态的,并在每次评估时创建新的随机值. 下面是一些相关的函数的介绍: tf.random_normal 从正态分布中输出随机 ...
- python_ssh连接
首先下载paramikopip install paramiko查看并启动ssh服务service ssh status 添加用户:useradd -d /home/zet zetpasswd zet ...
- click模块使用
# coding:utf8 import time import click @click.command() @click.option('--id', default='123', help='a ...