博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SCU 4438 Censor(Hash)题解
阅读量:4322 次
发布时间:2019-06-06

本文共 1214 字,大约阅读时间需要 4 分钟。

题意:找出字符串p中的w串删除,反复操作,直到找不到w,输出这个串

思路:哈希处理前缀和,如果值相同就删掉。

代码:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef unsigned long long ull;const int maxn = 5e6 + 10;const ull seed = 131;ull bin[maxn], Hash[maxn];char p[maxn], w[maxn], ans[maxn];void init(){ bin[0] = 1; for(int i = 1; i < maxn; i++) bin[i] = bin[i - 1] * seed;}int main(){ init(); while(~scanf("%s%s", w + 1, p + 1)){ int lenw = strlen(w + 1), len = strlen(p + 1); ull aim = 0; if(lenw > len){ printf("%s\n", p + 1); } else{ int point = 1; for(int i = 1; i <= lenw; i++) aim = aim * seed + w[i] - 'a'; Hash[0] = 0; for(int i = 1; i <= lenw - 1; i++){ Hash[point] = Hash[point - 1] * seed + p[i] - 'a'; ans[point++] = p[i]; } for(int i = lenw; i <= len; i++){ Hash[point] = Hash[point - 1] * seed + p[i] - 'a'; ans[point] = p[i]; if(point >= lenw && Hash[point] - Hash[point - lenw] * bin[lenw] == aim){ point -= lenw; } point++; } for(int i = 1; i < point; i++){ printf("%c", ans[i]); } printf("\n"); } } return 0;}

 

转载于:https://www.cnblogs.com/KirinSB/p/9895757.html

你可能感兴趣的文章
几道面试题
查看>>
【转】使用 WebGL 进行 3D 开发,第 1 部分: WebGL 简介
查看>>
js用正则表达式控制价格输入
查看>>
chromium浏览器开发系列第三篇:chromium源码目录结构
查看>>
java开发操作系统内核:由实模式进入保护模式之32位寻址
查看>>
第五讲:单例模式
查看>>
Python编程语言的起源
查看>>
Azure ARMTemplate模板,VM扩展命令
查看>>
第三周作业
查看>>
浅谈模块化
查看>>
(转)arguments.callee移除AS3匿名函数的侦听
查看>>
onNewIntent调用时机
查看>>
MYSQL GTID使用运维介绍(转)
查看>>
学习新语言等技能的历程
查看>>
04代理,迭代器
查看>>
解决Nginx+PHP-FPM出现502(Bad Gateway)错误问题
查看>>
Java 虚拟机:互斥同步、锁优化及synchronized和volatile
查看>>
2.python的基本数据类型
查看>>
python学习笔记-day10-01-【 类的扩展: 重写父类,新式类与经典的区别】
查看>>
查看端口被占用情况
查看>>