bzoj 4503】的更多相关文章

[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4503 [题目大意] 给出S串和T串,计算T在S中出现次数,T中有通配符'?'. [题解] 我们定义f[x]=sum_{i=0}^{n-1}|s1[i]-s2[i]|,当f[x]=0时,两个字符串相等.因为考虑到这里还有适配符,所以用f[x]=sum_{i=0}^{n-1}(s1[i]-s2[i])*(s1[i]-s2[i])*s1[i]*s2[i]来表示匹配函数.我们可以发现,如果将…
4503: 两个串 题意:兔子们在玩两个串的游戏.给定两个只含小写字母的字符串S和T,兔子们想知道T在S中出现了几次, 分别在哪些位置出现.注意T中可能有"?"字符,这个字符可以匹配任何字符. 为什么智障游戏总要让兔子来玩 受到上题影响,直接每个字符算一遍最后加上?的个数,26倍常数完美TLE 上一题是因为母串的每个位置可以匹配几种字符我们才那么做,对于只有相等匹配和万能匹配的问题不用那样做 我们可以直接构造这样一个卷积, \(a_i=s_i\) \(b_i=t_i,\ t_i \ne…
4503: 两个串 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 497  Solved: 226 Description 兔子们在玩两个串的游戏.给定两个字符串S和T,兔子们想知道T在S中出现了几次, 分别在哪些位置出现.注意T中可能有“?”字符,这个字符可以匹配任何字符. Input 两行两个字符串,分别代表S和T Output 第一行一个正整数k,表示T在S中出现了几次 接下来k行正整数,分别代表T每次在S中出现的开始位置.按照从小到大的顺…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4503 翻转T,就变成卷积.要想想怎么判断. 因为卷积是乘积求和,又想到相等的话相减为0,所以可以求和 s[ i ] - t[ j ] ,这样有一个不相等的求和就不是0了:但注意可以有负数,所以加一个平方上去就行了: 考虑通配符,需要只要有通配符值就是0:所以可以在那个平方的外面再乘一个t[ j ].然后就正常卷积. 注意要输出方案!!! #include<iostream> #inclu…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4503 推式子即可: 不知怎的调了那么久,应该是很清晰的. 代码如下: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; typedef double db; <&l…
Description 兔子们在玩两个串的游戏.给定两个字符串S和T,兔子们想知道T在S中出现了几次, 分别在哪些位置出现.注意T中可能有“?”字符,这个字符可以匹配任何字符. Input 两行两个字符串,分别代表S和T Output 第一行一个正整数k,表示T在S中出现了几次 接下来k行正整数,分别代表T每次在S中出现的开始位置.按照从小到大的顺序输出,S下标从0开始. Sample Input ababcadaca a?a Sample Output 3 0 5 HINT S 长度不超过 1…
题目链接 \(Description\) 给定两个字符串S和T,求T在S中出现了几次,以及分别在哪些位置出现.T中可能有'?'字符,这个字符可以匹配任何字符. \(|S|,|T|\leq 10^5\). \(Solution\) FFT: https://www.cnblogs.com/cjyyb/p/8798446.html 显然我们可以同CF528D一样枚举\(26\)个字符然后跑\(FFT\).但字符集太大了,复杂度是\(O(26n\log n)\),以\(FFT\)的常数肯定GG.(然而…
没有权限号就只能对拍了 我们令?代表的T值=0,然后设出这样一个式子 这样一来,只要T和S在j位置匹配,当且仅当Dj=0,然后我们将这个式子拆开,变成下面那样 思路大概就是这样 最后发现答案应该是在ans[lens2-1]---------ans[lens1-1]之间的 翻转字符用FFT优化是一种常见策略 代码: #include <bits/stdc++.h> using namespace std; #define dob complex<double> const doubl…
Description 兔子们在玩两个串的游戏.给定两个字符串S和T,兔子们想知道T在S中出现了几次, 分别在哪些位置出现.注意T中可能有"?"字符,这个字符可以匹配任何字符. Input 两行两个字符串,分别代表S和T Output 第一行一个正整数k,表示T在S中出现了几次 接下来k行正整数,分别代表T每次在S中出现的开始位置.按照从小到大的顺序输出,S下标从0开始. Sample Input bbabaababaaaaabaaaaaaaabaaabbbabaaabbabaabbb…
题目大意: 给定两个\((length \leq 10^5)\)的字符串,问第二个串在第一个串中出现了多少次.并且第二个串中含有单字符通配符. 题解: 首先我们从kmp的角度去考虑 这道题从字符串数据结构的方面去考虑你就错了 因为这是我在刷FFT时遇到的题嘛,,直接就去想FFT的做法 我们知道,两个字符串相等当且仅当 \[(\sum_{i=1}^n(s1[i] - s2[i])^2*[s2[i] \neq ?]) = 0\] 注:可以将s1理解为从第一个串中取出的一个后缀 那么我们对每个s1中的…