首页 > 其他分享 >洛谷P4824题解

洛谷P4824题解

时间:2023-05-05 10:12:07浏览次数:52  
标签:1000010 洛谷 int 题解 top lent hash P4824 mod

题面

题意:给出字符串 s 和 t,每次操作将 s 中出现的第一个 t 删去,直到不能删为止。求最后的串。
|s|<=1e6


题解:hash 做法。(此题也有 kmp 和权值线段树做法)
因为涉及到删除操作,所以我们要动态的实现这个过程。所以考虑开一个栈来存储当前留下的字符。
然后每有一个字符入栈,就拿当前栈顶的 hash 值来算现在的 hash 值。这样就保证了我的栈中每个位置的 hash 值是连续的。
那么就可以用正常字符串 hash 的方法来判断现在栈顶的 |t| 个字符是否和 t 一致了。如果相同,直接栈顶-=|t|,接下来再从新的栈顶开始做就行。
答案就是最后栈中剩下的东西

char s[1000010], t[1000010];
long long adjust = 1, stk[1000010], goal;
int lens, lent, top = 0, ans[1000010];
int main() {
	scanf("%s%s", s+1, t+1);
	lens = strlen(s+1), lent = strlen(t+1);
	for(int i = 1; i <= lent; ++i) adjust = adjust * base % mod;
	for(int i = 1; i <= lent; ++i) goal = (goal * base + t[i] - 'a' + 1) % mod;
	for(int i = 1; i <= lens; ++i) {
		stk[top + 1] = (stk[top] * base + s[i] - 'a' + 1) % mod; top++;
		ans[top] = i;
		if(top >= lent && ((stk[top] - stk[top - lent] * adjust % mod) % mod + mod) % mod == goal) top -= lent;
	}
	for(int i = 1; i <= top; ++i) putchar(s[ans[i]]);
	return 0;
}

标签:1000010,洛谷,int,题解,top,lent,hash,P4824,mod
From: https://www.cnblogs.com/1358id/p/17373301.html

相关文章

  • Linux IMX6ULL RTC掉电不保存问题解决
    背景:公司临时派发的小任务,解决项目中RTC实时时钟的问题,在为解决这个问题之前,项目的实时时钟老是一断电重启就会出现出现恢复到一个固定的时间。琢磨了许久,终于解决了,特此记录一下,给读者如遇到相关问题提供一下思路拓展。平台:imx6ull开发板加Linux系统。解决步骤:1.删除Linux......
  • CWOI 2023.05.04 题解
    mzx的动态规划杂题选讲。stoARC153D-SumofSumofDigitsP7152[USACO20DEC]BovineGeneticsGCF1542E2AbnormalPermutationPairs(hardversion)题意给定\(n,m\),求有多少对长度为\(n\)的排列\(p,q\),满足以下条件:\(p\)的字典序小于\(q\);\(p\)的逆序对......
  • 洛谷P7469题解
    题面题意:有两个字符串a和b,问b中有多少个本质不同子串可以由a删除若干个字符得到。|a|,|b|<=3000题解:字典树(这个题做法很多,后补)。把字符串b的每个子串打到字典树上。然后因为3000^2*26这个东西比较大,所以不能用nxt[id][26]来存储,于是使用链式前向星存图,这样tri......
  • 问题解答 | FMCW TDMA-MIMO毫米波雷达信号处理仿真
    本文编辑:@调皮连续波,保持关注调皮哥,获得更多雷达学习资料和建议!大家好,我是调皮哥,今天继续给大家分享干货,助力大家轻松、快乐、有方向地学习雷达。之前分享的文章:雷达仿真|FMCWTDMA-MIMO毫米波雷达信号处理仿真(可修改为DDMA-MIMO)当中,存在几个小问题(bug),具体如下:第十节:多普勒补偿”......
  • 关于容斥原理 / P5505题解
    发现很多题解连容斥原理的“钦定”和“至少”的区别都讲不清楚,误导萌新,所以写一下这两个东西的区别“钦定”这个东西是会算重的,而“至少”不会。举个例子吧,比如\(1\2\3\)三个位置不合法,如果我说“钦定”两个位置不合法,那么这里计算方案的时候这个不合法的方案会被计算三次,分......
  • [JOI 2016 Final]断层 题解
    题目链接首先发现斜着平移比较难处理,所以考虑将平面逆时针旋转\(45°\)。接着发现风化也不好处理,但是风化的一定不会作为答案,所以我们可以离线,然后倒着处理操作,上升变为下降。我们发现每个初始\(0\)点最后的坐标就是它正着做时初始的坐标,且每次操作都只会将连续一段点的\(......
  • 【23.05.03】好题题解
    好题题解A题目大意:计算一个项数为\(n\)的多项式除以\(x^3-x\)的余数多项式。数据范围:对于\(100\%\)的数据:\(2\leqn\leq2\times10^5\)解题分析:水题,直接多项式除法模拟即可。需要注意细节。ACCode:#include<bits/stdc++.h>usingnamespacestd;#d......
  • 【题解】ABC300 F,G
    F.MoreHolidays题目分析:考虑刻画一下我们选择是什么样子的。考虑我们最后选择的\(T\)中的一段一定是形如:一个完整的S选择一个后缀\(+\)若干个完整的S\(+\)一个完整的S的前缀。这样的话就启示我们直接枚举这个前后缀选择的是什么,然后就可以很快算出来了,但是枚举前......
  • [POI2005]SAM-Toy Cars 题解(贪心+堆)
    题面首先考虑一个贪心策略:当地板已经放满需要取出一个时,取下一次使用时间\(nxt\)最晚的那个。所以我们只需要一个可以快速求出一个集合中\(nxt\)最小的点并删除,插入新点的数据结构,这里很容易想到堆。代码很简洁,注意数组的下标是位置还是颜色(考场100pts到0pts)。code:......
  • Valhalla Siege 题解
    题目传送门一道二分题。先观察数据范围,\(1\len,q\le200,000\),显然需要\(O(n\logn)\)的复杂度。且\(1\lek_i\le10^{14}\),需要开longlong。我们需要二分到第一个血量大于伤害值的武士的位置,前面的武士都死了。而在C++算法库中,有一个函数upper_bound(底层原理是二分)正......