HackerRank - "Sam and sub"

Brutal-force solution is not hard to think about. But linear space input usually indicates O(n) DP solution.

State design: dp[i]: total sum until index i; and then you need some number manipulation to figure out the equation.

https://www.hackerrank.com/challenges/sam-and-substrings/editorial

#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;

#define MOD 1000000007

size_t calc(string &str)
{
    size_t len = str.length();
    vector<size_t> dp(len + 1);
    dp[0] = str[0] - ‘0‘;
    for (int i = 1; i < len; i++)
    {
        size_t curr = (i + 1) * (str[i] - ‘0‘) % MOD;
        curr += 10 * dp[i - 1] % MOD;
        dp[i] = curr;
    }
    //    Get sum
    size_t ret = 0;
    for (int i = 0; i < len; i++)
        ret = (ret + dp[i]) % MOD;
    return ret;
}

int main()
{
    string in; cin >> in;
    size_t len = in.length();
    size_t r = calc(in);
    cout << r << endl;
    return 0;
}
时间: 2024-10-07 09:04:04

HackerRank - "Sam and sub"的相关文章

sam 文件的解释

高通两数据测序之后要map到基因组上,我通常用bwa bowtie和tophat .其实我知道sam 文件有好几个field,每个field代表不同的意思,但是由于各种格式的文件确实太多了,我也记不住每个field具体的意思.每次要用的时候都是上网再去找,或者把相关的资料下载下来,再现学. 今天,我和一个同学讨论我们数据的情况.他们都是用bowtie 去map 的,我之前写了个脚本,是用bwa 做的map,我有点懒散,也懒得再去修改了,于是也没想着要再写一个用bowtie 做map的脚本.与同学

SAM初探

SAM,即Suffix Automaton,后缀自动机. 关于字符串有很多玩法,有很多算法都是围绕字符串展开的.为什么?我的理解是:相较于数字组成的序列,字母组成的序列中每个单位上元素的个数是有限的.对于有限的东西,相较于无限的东西就会具有一些奇妙的性质.最简单的,就是序列扩展成的树每个节点的儿子数是有限的.所以根据这个,从字符串Hash,到KMP,再到Suffix Array,Suffix Automaton,纷纷诞生. 后缀数组在处理字符串上相当于一把好钢,他能应付在字符串的大多数问题.那么

Bonetrousle HackerRank 数学 + 思维题

https://www.hackerrank.com/contests/world-codesprint-6/challenges/bonetrousle 给定一个数n,和k个数,1--k这k个,要求选择b个数,使得这b个数的和等于n. 首先考虑最小值,在1--k中选择前b个数,是最小的,记为mi.最大值,后b个数相加,记为mx 注意到一个东西:如果mi <= n <= mx.那么是绝对可行的.因为mi总能增加1(同时保证满足要求),所以在这个区间里面的,都是可行解. 所以首先从mi开始枚举,

【bzoj3926- [Zjoi2015]诸神眷顾的幻想乡】广义sam

题意:给定一棵树,每个节点有一个颜色,问树上有多少种子串(定义子串为某两个点上的路径),保证叶子节点数<=20.n<=10^5 题解: 叶子节点小于等于20,考虑将每个叶子节点作为根把树给提起来形成一棵trie,然后定义这棵树的子串为从上到下的一个串(深度从浅到深). 这样做我们可以发现每个子串必定是某棵trie上的一段直线.统计20棵树的不同子串只需要把它们建到一个自动机上就行了,相当于把20棵trie合并成一棵大的.对于每个节点x,它贡献的子串数量是max[x]-min[x],又因为min

TOPCODER SAM 686 div1 300

// TOPCODER SAM 686 div1 300 Problem Statement 带有小中括号的括号序列,问可以去掉多少子串,使得剩下的非空串是合法的. Constraints 字符串长度不超过 40. Examples // ans[i] = count(s[i]) string s[] = {"()[]", "())", "()()", "([)]", "())[]][]([]()]]()]]]&qu

UVA1673 str2int(SAM)

[题目链接] http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=51267 [题意] 给定n个字符串,计算所有忽略前导0的子串形成的不重整数之和. [思路] 既然是处理子串问题,我们可以合并串之后构造一个SAM. SAM的性质:结点u代表的字符串集是从根到u路径上的所有结点代表的字符串集之并,结点u所代表的字符串集为最长串的所有子串. 记cnt[u]为状态u代表的字符串个数,sum[u]代表状态u代表的字符串对应的数之和. 拓

uva 11419 SAM I AM (最小覆盖 K&#246;nig定理)

uva 11419 SAM I AM 题目大意:给出一个R×C的网格,网格上棉纺了一些目标.可以在网格外发射子弹,子弹会沿着垂直或水平方向飞行,并且打掉飞行路径上的所有目标.你的任务是计算出最少需要多少子弹,各从哪个位置发射,才能把所有目标全部打掉. 解题思路:K?nig定理:最小覆盖数等于最大匹配数.把目标所在的坐标,转化为XY结点,行看成X结点,列看成Y结点.那现在问题就变成了,如何选最少的结点,覆盖所有的边. 求最小覆盖的步骤大致如下:1)在右边找到一个未被匹配过的点,标记.2)走一条没被

hackerrank maxsum mod

https://www.hackerrank.com/challenges/maximise-sum/submissions/code/12028158 hackerrank 子数组和模m的最大值 时间复杂度nlgn, 主要是证明一点,presum[i]-presum[j] 对于0<j<i的j,最大的是第一个大于presum[i]的presum[j] 证明如下 Quro的讨论,感觉还是证明的过程不够细致 http://www.quora.com/What-is-the-logic-used-i

房价预测(HackerRank)

从今天开始要多做一些关于机器学习方面的竞赛题目,题目来源主要是Hackerrank和Kaggle.链接如下 Hackerrank:https://www.hackerrank.com/ Kaggle:https://www.kaggle.com/ 在Hackerrank中提交源代码,这就使得很多库都需要自己写,限制比较多.而Kaggle只需要提交数据,所以随便怎么搞都行.现在来讲第一道题,房价预测,这是Andrew Ng课程里的比较经典的例子.题目描述如下 题目:https://www.hack