11.12 模拟赛T1 加密

【问题描述】

有一种不讲道理的加密方法是: 在字符串的任意位置随机插入字符。 相应的,

不讲道理的解密方法就是从字符串中恰好删去随机插入的那些字符。

给定原文?和加密后的字符串?,求?有多少子串可以通过解密得到原文?。

【输入格式】

输入第一行包含一个字符串?,第二行包含一个字符串?。

【输出格式】

输出一行,包含一个整数,代表可以通过解密得到原文的?的子串的数量。

【样例输入】

abcabcabc
cba

【样例输出】

9

【样例解释】

用[l,r]表示子串开头结尾的下标(从 0 开始编号) ,这 9 种方案是:
[0,6],[0,7],[0,8],[1,6],[1,7],[1,8],[2,6],[2,7],[2,8]

【数据规模和约定】

30%的数据,|t|≤1000。
对于100%的数据,1 ≤ |t| ≤ 300,000,1 ≤|s|≤ 200。

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#ifdef unix
#define ll "%lld"
#else
#define ll "%I64d"
#endif
using namespace std;
char s[201],t[300001];
int l1,l2;
long long ans;
int main()
{
    freopen("encrypt.in","r",stdin);
    freopen("encrypt.out","w",stdout);
    int i,j;
    scanf("%s%s",t,s);
    l1=strlen(t);
    l2=strlen(s);
    i=j=0;
    int be=-1,ss=-1;
    while(i<l1)
    {
        if(t[i]==s[0]&&be==-1)
          be=i;
        if(t[i]==s[j])
          j++;
        if(j==l2)
        {
            j=0;
            ans=ans+(long long)(be-ss)*(l1-i);//统计方案数
            i=be;
            ss=be;//防止重复计算
            be=-1;
        }
        i++;
    }
    cout<<ans;
    fclose(stdin);
    fclose(stdout);
    return 0;
}
时间: 2024-10-11 16:38:24

11.12 模拟赛T1 加密的相关文章

11.12模拟考T1(可持续优化)PS:神奇的东西

1.数列操作   (array.pas/c/cpp) [问题描述] 现在有一个数列,最初包含0个数.现在要对数列操作n次,操作有3类. 1) a k,在数列的最后插入一个整数k 2) s 将最近插入的数删除. 3) t k 将数列恢复第k次操作前的状态 下面是一个例子,有12个操作 1 a 5 -> [5] => 5 加入数5 2 a 3 -> [5,3] => 3 加入数3 3 a 7 -> [5,3,7] => 7 加入数7 4 s -> [5,3] =>

2014.11.12模拟赛【最小公倍数】| vijos1047最小公倍数

最小公倍数(lcm.c/.cpp/.pas) 题目描述 给定两个正整数,求他们的最小公倍数. 样例输入 28 12 样例输出 84 数据范围 对于40%数据:1<=a,b<=10^9 对于60%的数据:1<=a,b<=10^12 对于100%数据:1<=a,b<=10^100 提示:为了略微降低题目难度,增加以下条件: 1. 输入数据保证a>=b 2. 输入数据保证a.b没有前导0 3. 输入数据保证除了在两个正整数a.b之间的空格和行末换行符以外,不存在其他非数

2014.11.12模拟赛【最大公因数】

最大公因数(gcd.c/.cpp/.pas) 题目描述 给定正整数n,求. 样例输入 6 样例输出 15 数据范围 对于40%的数据:1<=n<=1000000 对于100%的数据:1<=n<=3*10^12 提示:保证答案不超过10^18 原创题! ……好吧其实最后发现bzoj2705[longge的问题]跟这个一毛一样,但是这个数据更强 不过我真是独立yy出来的 首先,考虑gcd(i,n)==k的i有几个 显然这是等价于gcd(j,n/k)==1的j有几个,其中1<=j&

2017 11 6模拟赛T1

作为一个毒瘤出题人(wzy:我不是毒瘤出题人,这些题明明很水的),wzy的题干十分复杂,但是把题意简化之后,相当简单粗暴... 求首项为1,等比为m,项数为t的等比数列的和,答案对k取模 不保证m与k互质 如果m与k互质的话,用等比数列的求和公式在求个逆元就能解决了,但是本题显然不能,于是必须考虑不含有除法的算法 于是就有了分治求等比数列和的办法. 设s(x)为等比数列的第n项 由等比数列的性质得到s(y)=s(x)*m^(y-x) (y>x) 将一个长度为2r的等比数列拆分成登场的两部分,对应

2014.11.12模拟赛【美妙的数字】| vijos1904学姐的幸运数字

美妙的数字(number.c/.cpp/.pas) 题目描述 黄巨大认为非负整数是美妙的,并且它的数值越小就越美妙.当然0是最美妙的啦. 现在他得到一串非负整数,对于每个数都可以选择先对它做二进制非运算(模二意义下0.1互换,注意前导0也要交换),然后在任意相邻的两个数之间插入二进制与.二进制或,或者二进制异或.现在他想知道这样计算完产生的最美妙的数字是多少. 一共T组数据.对于每组数据,第一行一个n,表示这组数据中一串数有多少个.下面n个非负整数,表示这串数. 样例输入 2 2 3 6 3 1

11.12 模拟赛T2 冒泡排序图

[问题描述] 有一段使用冒泡排序产生一张图的伪代码如下:function bubbleSortGraph(n, a[]): graph = emptyGraph() repeat swapped = false for i = 1 to n - 1:  if a[i] > a[i + 1]: graph.addEdge(a[i], a[i + 1]) swap(a[i], a[i + 1]) swapped = true until not swapped return graph函数的输入为长

[11.10模拟赛]T1

Description 小\(W\)终于学会了魔术, 她迫不及待的想要给你展示一下,小\(W\)的魔术是这样的: 她可以删去一个字符串的任意一个连续子串(可以为空) , 然后把剩下的部分按顺序拼接成一个字符串. 小\(W\)由于刚刚学会魔术, 她只能使用一次. 小\(W\)还有一个特别喜欢的字符串\(s\),如果使用一次魔术之后剩下的字符串就是\(s\),小\(W\)就会对自己的魔术感到满意,但是并不是所有字符串可能让小\(W\)感到满意. 小\(W\)想知道长度为\(n\)的只由小写字母组成的

2017.6.11 校内模拟赛

题面及数据及std(有本人的也有原来的) :2017.6.11 校内模拟赛 T1 自己在纸上模拟一下后就会发现 可以用栈来搞一搞事情 受了上次zsq 讲的双栈排序的启发.. 具体就是将原盘子大小copy一下排个序 用两个指针维护两个数组(原数据 和 排序后的数据), 即分为1数据和2数组 将小于1指针指向的数据的2数组中的数据全部压入栈中 后进行消除, 将栈栈顶元素与当前1数组中的1指针指向的元素进行比较 相同则消除 后重复过程 直至指针超过N 后判断一下是否两个指针都超过了N... #incl

11.27 模拟赛

并没有人做的模拟赛... 出题人hx,,, T1:就是上一道矩阵乘法 数学题 T2: 一个数列中 一个区间满足,存在一个k(L <= k <= R),并且对于任意的i (L <= i <= R),ai都能被ak整除 这样的一个特殊区间 [L, R]价值为R - L 想知道序列中所有特殊区间的最大价值是多少,而有多少个这样的区间呢 这些区间又分别是哪些呢 输出每个区间的L 思路: 用两个ST表分别求一段区间的gcd和最小值 然后可以二分答案 check的时候枚举左端点,判断在这段区间