您的位置:首页 > 其它

16.1112 模拟考试 T1

2017-03-17 16:13 211 查看
加密
【问题描述】
有一种不讲道理的加密方法是: 在字符串的任意位置随机插入字符。 相应的,
不讲道理的解密方法就是从字符串中恰好删去随机插入的那些字符。
给定原文s和加密后的字符串t,求?有多少子串可以通过解密得到原文s。
【输入格式】
输入第一行包含一个字符串t,第二行包含一个字符串s。
【输出格式】
输出一行,包含一个整数,代表可以通过解密得到原文的s的子串的数量。
【样例输入】
abcabcabc
cba
【样例输出】
9
【样例解释】
用[?,?]表示子串开头结尾的下标(从 0 开始编号) ,这 9 种方案是:
[0,6],[0,7],[0,8],[1,6],[1,7],[1,8],[2,6],[2,7],[2,8]
【数据规模和约定】
30%的数据,|?| 1000。
对于100%的数据,1 ≤ |t| ≤ 300,000,1 ≤ s ≤ 200。

1 #include <cstdio>
2 #include <algorithm>
3 #include <cstring>
4 using namespace std;
5 long long ans;
6 const int N = 301000, M = 210;
7 char S
, T[M];
8 int n, m, f[M];
9 int main() {
10     freopen("encrypt.in", "r", stdin);
11     freopen("encrypt.out", "w", stdout);
12     scanf("%s%s", S + 1, T + 1);
13     n = strlen(S + 1), m = strlen(T + 1);
14     for (int i = 1; i <= n; ++i) {
15         f[0] = i;
16         for (int j = m; j; --j)
17             if (S[i] == T[j]) f[j] = f[j - 1];
18         ans += f[m];
19     }
20     printf("%I64d\n", ans);
21     return 0;
22 }


1 #include <cstdio>
2 #include <cstring>
3 #include <iostream>
4 #include <string>
5 using namespace std;
6 typedef long long ll;
7 const int N = (int)3e5 + 10;
8 const int M = 210;
9 char a[N + 1], b[M + 1];
10 int n, m, p[M + 1];
11 inline bool move(int x, int l) {
12     for (; l < n && a[l] != b[x]; ++l) ;
13     p[x] = l;
14     return l < n;
15 }
16 inline ll move() {
17     int pos = p[0];
18     if (!move(0, p[0] + 1)) return 0LL;
19     for (int i = 1; i < m; ++i)
20         if (!move(i, p[i - 1] + 1)) return 0LL;
21     return (ll)(p[0] - pos) * (n - p[m - 1]);
22 }
23 int main(int argc, char *argv[]) {
24     freopen("encrypt.in", "r", stdin);
25     freopen("encrypt.out", "w", stdout);
26     scanf("%s%s", a, b);
27     n = strlen(a), m = strlen(b);
28     ll ans = 0LL, cur;
29     p[0] = -1;
30     while (cur = move())
31         ans += cur;
32     cout << ans << endl;
33     fclose(stdin);
34     fclose(stdout);
35     return 0;
36 }


思路:我
e5d7
不会,大神求解救~~%%%%%%%%%%%%%%%%%%

付数据~  提取密码:xvha
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: