2019牛客暑期多校训练营(第四场)K.number
题意:给你一个字符串s,求出其中能整除300的子串个数(子串要求是连续的,允许前面有0)
思路:
》动态规划
记f[i][j]为右端点为i,满足mod 300 = j的子串个数,可以容易的转移
则状态转移方程为:f[i][(10*j+num[i]) %300] = f[i][(10*j+num[i]) %300] + f[i-1][j]
解释:假如给你个数3,很容易得出3mod300的值就是3,f[3] = 1,然后在3后面加一位1,变为31,则31mod300的值为31,f[31] = 1。我们令(10*j+num[i]) mod 300为x,仔细想一想后,你会发现当前f[x]的值可以由现在的f[x]加上之前f[j]的值更新得到,记得最后让f[num[i]]的值加1
题目求的是mod 300 = 0的字串个数,因此,每次让ans的值加上f[i][0]更新就好了
Code
#include <bits/stdc++.h>
using namespace std; const int maxn = 1e5+;
char s[maxn];
long long dp[maxn][]; int main()
{
cin >> s;
int len = strlen(s);
long long ans = ;
for(int i = ;i < len; i++){
dp[i][s[i]-'']++;
for(int j = ; j < ; j++){
dp[i+][(j*+s[i+]-'')%] += dp[i][j];
}
ans += dp[i][];
}
cout << ans << endl;
return ;
}
》思维
仔细观察我们可以发现300的倍数既是3的倍数也是100的倍数,那我们只需要满足这个数最后两位是0,前面的和能整除3就好了。
这时我们考虑用前缀和+同模做差,
比如,有a b c d e,(a+b)%mod = k,(a+b+c+d+e)%mod也 = k,那么(c+d+e)%mod = 0,即该子序列是mod的整数倍数。
记sum(i)为前i位的和mod 3的值,那么对于长度大于等于2的区间[l,r],合法条件即为sum(l-1) = sum(r),且s[r-1],s[r]为' 0 '
从小到到大枚举r,并同时用cnt这个数组记录有多少个0<=x<=r-2,分别满足sum(x) = 0, 1, 2,
注意会出现sum(i)本身就mod 3为0的情况,这里需要初始化cnt[0] = 1
Code
#include<cstdio>
char s[];
long long cnt[];
int main()
{
scanf("%s",s);
cnt[]=;
long long ans = ;
int mo = ;
for(int i=;s[i]!='\0';i++){
if(s[i]=='') ans++;
if(s[i]==''&&s[i+]=='')
ans += cnt[mo];
mo = (mo+s[i]-'')%;
cnt[mo]++;
}
printf("%lld\n",ans);
}
Over~ ~ ~
参考自:https://blog.csdn.net/cacyth/article/details/50623617
2019牛客暑期多校训练营(第四场)K.number的更多相关文章
- 2019牛客暑期多校训练营(第九场)A:Power of Fibonacci(斐波拉契幂次和)
题意:求Σfi^m%p. zoj上p是1e9+7,牛客是1e9: 对于这两个,分别有不同的做法. 前者利用公式,公式里面有sqrt(5),我们只需要二次剩余求即可. 后者mod=1e9,5才 ...
- 2019牛客暑期多校训练营(第一场)A题【单调栈】(补题)
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 Two arrays u and v each with m distinct elem ...
- 2019牛客暑期多校训练营(第一场) B Integration (数学)
链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Integration 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 5242 ...
- 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...
- 2019牛客暑期多校训练营(第二场)F.Partition problem
链接:https://ac.nowcoder.com/acm/contest/882/F来源:牛客网 Given 2N people, you need to assign each of them ...
- 2019牛客暑期多校训练营(第一场)A Equivalent Prefixes(单调栈/二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 Two arrays u and v each with m distinct elements ...
- [状态压缩,折半搜索] 2019牛客暑期多校训练营(第九场)Knapsack Cryptosystem
链接:https://ac.nowcoder.com/acm/contest/889/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...
- 2019牛客暑期多校训练营(第二场)J-Subarray(思维)
>传送门< 前言 这题我前前后后看了三遍,每次都是把网上相关的博客和通过代码认真看了再思考,然并卵,最后终于第三遍也就是现在终于看懂了,其实懂了之后发现其实没有那么难,但是的的确确需要思维 ...
- 2019牛客暑期多校训练营(第一场)-A (单调栈)
题目链接:https://ac.nowcoder.com/acm/contest/881/A 题意:给定两个长度均为n的数组a和b,求最大的p使得(a1,ap)和(b1,bp)等价,等价的定义为其任意 ...
- 2019牛客暑期多校训练营(第一场)A - Equivalent Prefixes(单调栈)
题意 给定两个$n$个元素的数组$a,b$,它们的前$p$个元素构成的数组是"等价"的,求$p$的最大值."等价"的意思是在其任意一个子区间内的最小值相同. $ ...
随机推荐
- 设计模式之单例模式的几种写法——java
对于设计模式的使用场景和好处,之前有介绍一篇,今天主要是单例模式的编写方式,直接看代码吧 单例模式之饿汉模式,不会懒加载.线程安全 /** * @Author wangtao * @Descripti ...
- Laravel --- Laravel5.3 和 Workerman结合使用(异步)
网上查阅资料有现成和workerman结合的composer组件,但个人感觉不太靠谱,github上star太少,而且怕有问题也不好调,就想自己先试试. 我的办法因为修改要一点Workerman源码, ...
- springboot 2.X 在访问静态资源的的时候出现404的问题
通过idea快速搭建一个springboot项目: springboot版本2.1.6 在网上看的资料,springboot静态资源访问如下: "classpath:/META‐INF/re ...
- Java学习笔记——Socket实现文件传输
我越是逃离,却越是靠近你. 我越是背过脸,却越是看见你. 我从你开始, 我在你结束. 需求:实现局域网下socket传输文件. 客户端步骤: 1.建立与服务器的连接 2.创建client输出流 3.创 ...
- GMap 自定义绘图
GMap自定义绘图 gmap自带的绘图只难绘制路径,多边形,固定大小的圆.在实际开发中可能这些并不能满足自己所需.这里就需要自定义绘图 原理:继承GMapRoute或者GMapMarker类,重写里面 ...
- JBuss--为所有JFinal开发者提供二次开发的后台管理系统
百度搜索:JBuss 或jfinal.com官网https://www.jfinal.com/share/1704 JBuss背景: 2018年6月1日,作者“为道日损”从上海一家xxx公司离职,那时 ...
- ES6_07_Symbol属性
Symbol属性: 前言:ES5中对象的属性名都是字符串,容易造成重名,污染环境 Symbol: 概念:ES6中的添加了一种原始数据类型symbol(已有的原始数据类型:String, Number, ...
- Smobiler与Windows的异步回调差别
Smobiler与Windows的异步回调差别--基于.NET的APP开发和Windows开发差别 基于.NET的APP开发和Windows开发,异步回调差别 Windows app开发 异步回调 S ...
- 一套简单的web即时通讯——第三版
前言 接上版,本次版本做了如下优化: 1.新增同意.拒绝添加好友后做线上提示: 2.新增好友分组,使用工具生成后台API,新增好友分组功能,主要功能有:添加分组.重命名分组名称.删除分组 3.新增好友 ...
- 浅谈c++中的KMP
百度上一些关于KMP算法的一些基本介绍 所谓KMP,其实就是一种经过改进的模式串匹配算法(即在原串A中查找是否存在模式串B) 通常情况下,我们是这样匹配的 串A X Y Z X X Y Z X ...