题目: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. 路飞学城-Python开发-第二章

    ''' 数据结构: menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家' ...

  2. centos安装nvidia驱动

    大部分 Linux 发行版都使用开源的显卡驱动 nouveau,对于 nvidia 显卡来说,还是闭源的官方驱动的效果更好.最明显的一点是,在使用 SAC 拾取震相的时候,使用官方显卡驱动在刷新界面的 ...

  3. Hibernate简单的保存操作

    1.这里面我想先说一下session对象的创建,这个是我们操纵数据库的核心对象,因此首先我们应该获取相应的session对象. public static Configuration cfg; pub ...

  4. Linux 环境下/etc/profile和/etc/profile.d 的区别

    Linux 环境下/etc/profile和/etc/profile.d 的区别 区别: 1. 两个文件都是设置环境变量文件的,/etc/profile是永久性的环境变量,是全局变量,/etc/pro ...

  5. SWT自定义选项卡CTabFolder

    SWT自定义选项卡CTabFolder 学习了:http://blog.csdn.net/dreajay/article/details/17391731 package com.swt; impor ...

  6. RIP协议的配置

    拓扑图: 要求: 理解RIP协议的工作原理,并通过 RIP 路由协议实现不同网络互通. 配置步骤: 1.配置好 PC 机的 IP 地址等參数. PC 0>ipconfig IP Address. ...

  7. 【我所认知的BIOS】系列blog整理 1.23.2016.zip

    这几年来,蛮多小伙伴都给我发邮件拿PDF版本号. 几年前写的文章格式什么的实在是太粗糙.近期我把全部的文章都整理了一下.事实上该想法已经早就有了,仅仅是近期才開始空暇.如今我把全部的文章整理好了以后上 ...

  8. Java实现斐波那契数列Fibonacci

    import java.util.Scanner; public class Fibonacci { public static void main(String[] args) { // TODO ...

  9. Laravel-路由组和中间件

    Laravel-路由组和中间件 标签(空格分隔): php 定义路由组 Route::group(['prefix'=>'Anime'], function(){ Rout::match(['g ...

  10. 区间dp学习笔记

    怎么办,膜你赛要挂惨了,下午我还在学区间\(dp\)! 不管怎么样,计划不能打乱\(4\)不\(4\).. 区间dp 模板 为啥我一开始就先弄模板呢?因为这东西看模板就能看懂... for(int i ...