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$的最大值."等价"的意思是在其任意一个子区间内的最小值相同. $ ...
随机推荐
- docker系列(五):网络通信
1 引言 之前的几篇docker系列博客说的都是单个容器或者镜像的操作.但容器,作为一种简化的操作系统,又怎能不与机器或者容器相互协同工作呢,这就需要用到容器的网络功能.docker中提供了多种不同的 ...
- php+mysql新无线级分类
create table cat( id int unsigned not null primary key auto_increment, pid , path ) not null default ...
- 快速接入业务监控体系,grafana监控的艺术
做一个系统,如果不做监控,是不完善的. 如果为做一个快速系统,花力气去做监控,是不值得的. 因为,我们有必要具备一个能够快速建立监控体系的能力.即使你只是一个普通开发人员! 个人觉得,做监控有三个核心 ...
- 微服务-springcloud-注册中心
创建服务注册中心(eureka-server) 1.创建项目,选择 Eureka Server 别的都不要选择,next-finish 2.application.yml中写入如下信息:通过eurek ...
- 微服务-springboot-activiti工作流
idea中安装aciviti并使用,链接地址:https://blog.csdn.net/qq_41728540/article/details/79506463 一.创建springboot项目,勾 ...
- core文件生成和路径设置
在程序崩溃时,内核会生成一个core文件,即程序最后崩溃时的内存映像,和程序调试信息. 之后可以通过gdb,打开core文件察看程序崩溃时的堆栈信息,可以找出程序出错的代码所在文件和函数. 1.cor ...
- HDU 2888:Check Corners(二维RMQ)
http://acm.hdu.edu.cn/showproblem.php?pid=2888 题意:给出一个n*m的矩阵,还有q个询问,对于每个询问有一对(x1,y1)和(x2,y2),求这个子矩阵中 ...
- 【MM系列】SAP 采购订单的批量修改
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP 采购订单的批量修改 前言 ...
- 剑指offer第二版-2.实现单例模式
面试题2:实现单例模式 题目要求: 设计一个类,只能生成该类的一个实例. /** * 单例模式 * 定义:指实现了特殊模式的类,该类仅能被实例化一次,产生唯一的一个对象 * 应用举例:windows的 ...
- 使用kubectl管理k8s集群(二十九)
前言 在搭建k8s集群之前,我们需要先了解下kubectl的使用,以便在集群部署出现问题时进行检查和处理.命令和语法记不住没有关系,但是请记住主要的语法和命令以及帮助命令的使用. 在下一篇,我们将讲述 ...