https://ac.nowcoder.com/acm/contest/884/K

一开始整了好几个假算法,还好测了一下自己的样例过了。

考虑到300的倍数都是3的倍数+至少两个零(或者单独的0)。

求以第i个位置的数为结尾的前缀和为j的数的方案数。

当遇到至少两个0的时候,ans+=dp[0][i-2]+1。

+1是那两个0的贡献。

这样子算会漏算单独的0的贡献,最后加回去。

还因为忘记mod3段错误好几次。

老了。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll; char s[100005];
int dp[3][100005]; int main() {
#ifdef Yinku
freopen("Yinku.in", "r", stdin);
#endif // Yinku
while(~scanf("%s", s)) {
int n = strlen(s);
for(int i = 0; i < n; ++i)
s[i] -= '0';
dp[0][0] = dp[1][0] = dp[2][0] = 0;
++dp[s[0] % 3][0];
int lx0 = (s[0] == 0);
ll ans = 0;
for(int i = 1; i < n; ++i) {
int c = s[i];
dp[c % 3][i] = dp[0][i - 1];
dp[(c + 1) % 3][i] = dp[1][i - 1];
dp[(c + 2) % 3][i] = dp[2][i - 1];
++dp[c % 3][i];
lx0 = (c == 0) ? lx0 + 1 : 0;
if(lx0 >= 2)
ans += dp[0][i - 2] + 1;
}
for(int i = 0; i < n; ++i)
ans += (s[i] == 0);
printf("%lld\n", ans);
}
}

2019牛客暑期多校训练营(第四场) - K - number - dp的更多相关文章

  1. 2019牛客暑期多校训练营(第一场)I dp+线段树

    题意 给出n个点,每个点有a,b两个属性,让你从左下角到右上角划一条线,线的左边每个点的贡献是\(a_i\),线的右边每个点的贡献是\(b_i\),使得两部分的总和最大. 分析 找一条折线将点分割开, ...

  2. 2019牛客暑期多校训练营(第九场)A:Power of Fibonacci(斐波拉契幂次和)

    题意:求Σfi^m%p. zoj上p是1e9+7,牛客是1e9:  对于这两个,分别有不同的做法. 前者利用公式,公式里面有sqrt(5),我们只需要二次剩余求即可.     后者mod=1e9,5才 ...

  3. 2019牛客暑期多校训练营(第一场)A题【单调栈】(补题)

    链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 Two arrays u and v each with m distinct elem ...

  4. 2019牛客暑期多校训练营(第一场) B Integration (数学)

    链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Integration 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 5242 ...

  5. 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)

    链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...

  6. 2019牛客暑期多校训练营(第二场)F.Partition problem

    链接:https://ac.nowcoder.com/acm/contest/882/F来源:牛客网 Given 2N people, you need to assign each of them ...

  7. 2019牛客暑期多校训练营(第一场)A Equivalent Prefixes(单调栈/二分+分治)

    链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 Two arrays u and v each with m distinct elements ...

  8. [状态压缩,折半搜索] 2019牛客暑期多校训练营(第九场)Knapsack Cryptosystem

    链接:https://ac.nowcoder.com/acm/contest/889/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...

  9. 2019牛客暑期多校训练营(第二场)J-Subarray(思维)

    >传送门< 前言 这题我前前后后看了三遍,每次都是把网上相关的博客和通过代码认真看了再思考,然并卵,最后终于第三遍也就是现在终于看懂了,其实懂了之后发现其实没有那么难,但是的的确确需要思维 ...

  10. 2019牛客暑期多校训练营(第一场)-A (单调栈)

    题目链接:https://ac.nowcoder.com/acm/contest/881/A 题意:给定两个长度均为n的数组a和b,求最大的p使得(a1,ap)和(b1,bp)等价,等价的定义为其任意 ...

随机推荐

  1. SparkConf源码解读

    ------------恢复内容开始------------ 1.主要功能:SparkConf是Spark的配置类,配置spark的application的应用程序,使用(key,value)来进行存 ...

  2. [洛谷P4438] HNOI2018 道路

    问题描述 W 国的交通呈一棵树的形状.W 国一共有n - 1个城市和n个乡村,其中城市从1到n - 1 编号,乡村从1到n编号,且1号城市是首都.道路都是单向的,本题中我们只考虑从乡村通往首都的道路网 ...

  3. React Native 之 createBottomTabNavigator,createMaterialTopTabNavigator

    icon第三方库 yarn add react-native-vector-icons react-native link react-native-vector-icons 在上次的代码中添加: A ...

  4. Spring配置:用context:property-placeholder替换PropertyPlaceholderConfigurer

    1.有时候需要从properties文件中加载配置,以前的方式是这样的: <bean id="jdbcProperties" class="org.springfr ...

  5. Java——package与import

    [package]   <1>为了解决类的命名冲突问题,Java引入包(package)机制,提供类的多重类命名空间. <2>package作为源文件的第一条语句(缺省时指定为 ...

  6. echarts曲线图

    drawLeftLine(){ let drawLine = echarts.init(document.getElementById('data-left-middle-table-wrap')); ...

  7. 拆系数$FFT$($4$遍$DFT$)

    #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> ...

  8. mui初级入门教程(六)— 模板页面实现原理及多端适配指南

    文章来源:小青年原创发布时间:2016-07-26关键词:mui,webview,template,os,多端适配转载需标注本文原始地址: http://zhaomenghuan.github.io. ...

  9. postgresql获取表最后更新时间(通过表磁盘存储文件时间)

    一.创建获取表更新时间的函数 --获取表记录更新时间(通过表磁盘存储文件时间) create or replace function table_file_access_info( IN schema ...

  10. 嵌入式Linux之虚拟内存地址空间布局(Virtual Memory Space)

    虚拟内存地址空间 Linux内核属于微内核的范畴,内核控制计算机的硬件资源,运行在特权模式:用户态应用程序运行在普通用户模式,无法直接访问硬件资源,必须依托于内核提供的资源,如CPU资源.Memory ...