题目:http://acm.hnu.cn/online/?

action=problem&type=show&id=13303&courseid=0

题意:给你一个字符串,由数字和其它字符组成,问有多少个子串,使得子串里面的数字和为3的整数倍(子串必须连续,并且里面不能有其它字符)。

分析:开3个数组,dp0[i],dp1[i],dp2[i]。dp0[i]表示从字符串的最后一个位置到位置i有多少个字符串的和是0的倍数,dp1[i],dp2[i]类似。

从后往前推,那么假如当前位置为i,(str[i]-'0')%3==1,dp0[i]=dp2[i+1],。。。。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 1e6+10;
char str[maxn];
long long dp0[maxn],dp1[maxn],dp2[maxn];
int main()
{
int len,i,j,x;
long long ans,Sum;
while(scanf("%s",str)!=EOF)
{
len=strlen(str);
memset(dp0,0,sizeof(dp0[0])*(len+2));
memset(dp1,0,sizeof(dp0[0])*(len+2));
memset(dp2,0,sizeof(dp0[0])*(len+2));
ans=0;
for(i=len-1;i>=0;i--)
{
if(str[i]>='0' && str[i]<='9')
{
x=(str[i]-'0')%3;
if(x==1)
{
ans+=dp2[i+1];
dp0[i]=dp2[i+1];
dp1[i]=dp0[i+1];
dp2[i]=dp1[i+1];
dp1[i]++;
}
else if(x==2)
{
ans+=dp1[i+1];
dp0[i]=dp1[i+1];
dp1[i]=dp2[i+1];
dp2[i]=dp0[i+1];
dp2[i]++;
}
else
{
ans+=dp0[i+1]+1;
dp0[i]=dp0[i+1];
dp1[i]=dp1[i+1];
dp2[i]=dp2[i+1];
dp0[i]++;
}
}
else
{
dp0[i]=dp1[i]=dp2[i]=0;
}
}
cout<<ans<<'\n';
}
return 0;
}

HNU13303 Counting substhreengs(递推)的更多相关文章

  1. POJ 3046 Ant Counting(递推,和号优化)

    计数类的问题,要求不重复,把每种物品单独考虑. 将和号递推可以把转移优化O(1). f[i = 第i种物品][j = 总数量为j] = 方案数 f[i][j] = sigma{f[i-1][j-k], ...

  2. hdu 1396 Counting Triangles(递推)

    Counting Triangles Problem Description Given an equilateral triangle with n thelength of its side, p ...

  3. Pyramid of Glasses(递推)

    Pyramid of Glasses time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  4. 【BZOJ-2476】战场的数目 矩阵乘法 + 递推

    2476: 战场的数目 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 58  Solved: 38[Submit][Status][Discuss] D ...

  5. 从一道NOI练习题说递推和递归

    一.递推: 所谓递推,简单理解就是推导数列的通项公式.先举一个简单的例子(另一个NOI练习题,但不是这次要解的问题): 楼梯有n(100 > n > 0)阶台阶,上楼时可以一步上1阶,也可 ...

  6. Flags-Ural1225简单递推

    Time limit: 1.0 second Memory limit: 64 MB On the Day of the Flag of Russia a shop-owner decided to ...

  7. 利用Cayley-Hamilton theorem 优化矩阵线性递推

    平时有关线性递推的题,很多都可以利用矩阵乘法来解决. 时间复杂度一般是O(K3logn)因此对矩阵的规模限制比较大. 下面介绍一种利用利用Cayley-Hamilton theorem加速矩阵乘法的方 ...

  8. 【66测试20161115】【树】【DP_LIS】【SPFA】【同余最短路】【递推】【矩阵快速幂】

    还有3天,今天考试又崩了.状态还没有调整过来... 第一题:小L的二叉树 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣.所以,小L当时卡在了二叉树. ...

  9. 简单递推 HDU-2108

    要成为一个ACMer,就是要不断学习,不断刷题...最近写了一些递推,发现递推规律还是挺明显的,最简单的斐波那契函数(爬楼梯问题),这个大家应该都会,看一点稍微进阶了一点的,不是简单的v[i] = v ...

随机推荐

  1. [细节版]Let'sEncrypt 免费通配符/泛域名SSL证书添加使用教程

    参考网址:https://lnmp.org/faq/letsencrypt-wildcard-ssl.html 使用的dns服务商:阿里云 , 更多服务商地址可见参考网址. 遇见的问题一. [Sat ...

  2. python3安装xadmin失败

    环境win7 旗舰版.python3 使用pip install xadmin命令的时候出现了错误>:\ (⊙o⊙) 解决方法如下: 使用pip download xadmin 现将xadmin ...

  3. adb如何连接mumu模拟器并修改Android ID

    adb工具下载安装 https://dl.google.com/android/repository/platform-tools-latest-windows.zip 参考:https://blog ...

  4. docker环境下mysql参数修改

    原文:docker环境下mysql参数修改 需要修改log_bin为on,看了好几个博客说都需要删掉容器重新生成,然而并非如此, 我们可以用docker cp 命令将docker的文件"下载 ...

  5. 【BZOJ 1452】 [JSOI2009]Count

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 维护一百个二维树状数组. 二维区间求和. [代码] #include <bits/stdc++.h> #define L ...

  6. HDU 3046 Pleasant sheep and big big wolf

    Pleasant sheep and big big wolf Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged ...

  7. 埃及分数 迭代加深搜索 IDA*

    迭代加深搜索 IDA* 首先枚举当前选择的分数个数上限maxd,进行迭代加深 之后进行估价,假设当前分数之和为a,目标分数为b,当前考虑分数为1/c,那么如果1/c×(maxd - d)< a ...

  8. solr环境搭建&基本使用

    分步指南 solr服务与tomcat整合 solr使用配置步骤 solr使用 推荐分词工具 相关的文章 一.Solr服务与tomcat整合 1.solr相关版本下载路径:http://archive. ...

  9. java用freemarker实现导出word----包含图片

    分为以下三个步骤: 1.先制作word模板 2.将该文档另存为 xml 文件 3.打开xml 文件 将对应的字段替换,比如 4.将xml文件保存成ftl格式的文档 5.相应的代码: package o ...

  10. 面向对象设计(OOD)七大原则

    这篇文章我会不停的维护它,它将会越来越长,但它是关于我在面向对象中的一些学习的思考心得.希望对自己对各位都能实用处.     开篇前,说明一下写这篇文章的原因.原因是由于设计模式.由于设计模式里的各种 ...