SCU 4438 Censor (字符串哈希)
来源:互联网 发布:淘宝网关键词排名查询 编辑:程序博客网 时间:2024/05/21 11:24
题目链接:传送门
题意:
给定一个模式串,和一个待处理的串,这个串中的所有模式串给去掉,如果将,去掉一个模式串后形成两个串,这两个串拼接在一起后又形成一个新的模式串这个新的模式串也要去掉。
分析:
将处理过的串放入栈中,如果栈顶的子串是一个模式串则去掉。
代码如下:
#include <bits/stdc++.h>using namespace std;const int maxn = 5e6+10;typedef unsigned long long LL;char str[maxn],s[maxn];const LL HASH = 1e5+7;int n,m;LL multi[maxn];LL Stack[maxn],Hash_str;char ans[maxn];inline bool check(int pos){ if(pos>=n){ if(Stack[pos]-Stack[pos-n]*multi[n]==Hash_str) return true; } return false;}void init(){ multi[0]=1; for(int i=1;i<maxn;i++) multi[i]=multi[i-1]*HASH;}int main(){ init(); while(~scanf("%s%s",str,s)){ n=strlen(str); m=strlen(s); Hash_str=0; for(int i=0;*(str+i);i++){ Hash_str=Hash_str*HASH + *(str+i); } Stack[0]=0; int top=0; for(int i=0;*(s+i);i++){ ans[top++]=s[i]; Stack[top]=Stack[top-1]*HASH + *(s+i); if(check(top)) top-=n; } for(int i=0;i<top;i++) printf("%c",ans[i]); puts(""); } return 0;}/***abcaaabcbcbbbbabcab***/
1 0
- SCU 4438 Censor (字符串哈希)
- scu 4438 Censor 字符串哈希+前缀和
- SCU-4438 Censor(字符串HASH)
- scu 4438 Censor
- SCU 4438 Censor (KMP)
- 未解决 训练赛3 ,kmp || 字符串哈希(没学)Censor SCU
- SCU 4438 Censor KMP/哈希
- SCU 4438 Censor(KMP / HASH)
- SCU-4438 Censor(KMP算法)
- SCU 4438 Censor KMP/Hash
- 2015四川省赛 scu oj 4438 Censor
- scu 4438 censor(KMP,栈保存匹配状态)
- SCU 4438 Censor (2015四川省省赛C题)
- SOJ 4438 Censor (字符串,kmp,hash,经典)
- scuoj 4438 Censor
- censor
- Censor
- censor
- 杨鹏谈世纪佳缘推荐算法:基于Spark GraphX,弃GBDT和LR用FM
- C# : Socket 接收中文显示乱码的解决办法
- Help library 安装arcobjects for .NET异常问题
- JAVA实现斐波那契数列问题(《剑指offer》)
- (void**)&a
- SCU 4438 Censor (字符串哈希)
- 四川省赛G.Party
- UVA 11292 Dragon of Loowater
- 求n^k的前3位和后3位
- 用递归判断一个数组是否递增 JAVA代码
- nyoj 一种排序 8 (结构体 排序)
- Android 事件处理详解(四) —— Handler和AsyncTask(补充)
- HDU5483求一个图中的最小生成树不能去掉的边的数目
- Spinner