bzoj 4503
没有权限号就只能对拍了
我们令?代表的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 double pi = acos(-1.0);
const int N = 6e4*;
int n, m, l, r[N+], sum[N+],ans[N+];
dob a[N+], b[N+],a1[N+],b1[N+];
void fft(dob *a,int o)
{
for (int i=;i<n;i++)
if (i>r[i]) swap(a[i],a[r[i]]);
for (int i=;i<n;i*=)
{
dob wn(cos(pi/i),sin(pi*o/i)),x,y;
for (int j=;j<n;j+=(i*))
{
dob w(,);
for (int k=;k<i;k++,w*=wn)
{
x=a[j+k]; y=w*a[i+j+k];
a[j+k]=x+y,a[i+j+k]=x-y;
}
}
}
}
char s1[N],s2[N];
void query()
{
l=;
for (n = ; n <= m; n <<= ) l++;
for (int i=;i<n;i++) r[i]=(r[i/]/)|((i&)<<(l-));
fft(a,),
fft(b,);
for (int i=;i<n;i++) a[i]*=b[i];
fft(a,-);
for (int i=;i<=m;i++) sum[i]=int (a[i].real()/n+0.5);
}
void clearr()
{
memset(a,,sizeof(a));
memset(b,,sizeof(b));
memset(sum,,sizeof(sum));
}
int main()
{
freopen("noip.in","r",stdin);
freopen("noip.out","w",stdout);
ios::sync_with_stdio(false);
cin>>s1>>s2;
for (int i=;i<strlen(s1);i++)
a1[strlen(s1)-i-]=s1[i]-' ';
for (int i=;i<strlen(s2);i++)
if (s2[i]=='?') b[i]=;
else b1[i]=s2[i]-' ';
n=max(strlen(s1),strlen(s2)); n--; m=n*;
clearr();
for (int i=;i<strlen(s1);i++)
a[i]=a1[i]*a1[i];
for (int i=;i<strlen(s2);i++)
b[i]=b1[i];
// cout<<b1[0].real();
// cout<<a1[0].real()<<" "<<a[0].real()<<endl;
query();
for (int i=;i<=m;i++) ans[i]+=sum[i];
clearr();
// cout<<b1[0].real();
for (int i=;i<strlen(s1);i++)
a[i]=a1[i];
for (int i=;i<strlen(s2);i++)
b[i]=b1[i]*b1[i];
query();
for (int i=;i<=m;i++) ans[i]-=*sum[i];
int sum2=;
for (int i=;i<strlen(s2);i++)
sum2+=pow(b1[i].real(),);
for (int i=;i<=m;i++)
ans[i]+=sum2;
int ans1=;
for (int i=strlen(s2)-;i<=strlen(s1)-;i++)
if (!ans[i]) ans1++;
cout<<ans1<<endl;
}
bzoj 4503的更多相关文章
- BZOJ 4503 两个串(FFT)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4503 [题目大意] 给出S串和T串,计算T在S中出现次数,T中有通配符'?'. [题解 ...
- BZOJ 4503: 两个串 [FFT]
4503: 两个串 题意:兔子们在玩两个串的游戏.给定两个只含小写字母的字符串S和T,兔子们想知道T在S中出现了几次, 分别在哪些位置出现.注意T中可能有"?"字符,这个字符可以匹 ...
- 【BZOJ 4503】4503: 两个串 (FFT)
4503: 两个串 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 497 Solved: 226 Description 兔子们在玩两个串的游戏.给 ...
- bzoj 4503 两个串——FFT
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4503 翻转T,就变成卷积.要想想怎么判断. 因为卷积是乘积求和,又想到相等的话相减为0,所以 ...
- bzoj 4503 两个串 —— FFT
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4503 推式子即可: 不知怎的调了那么久,应该是很清晰的. 代码如下: #include< ...
- bzoj 4503 两个串
Description 兔子们在玩两个串的游戏.给定两个字符串S和T,兔子们想知道T在S中出现了几次, 分别在哪些位置出现.注意T中可能有“?”字符,这个字符可以匹配任何字符. Input 两行两个字 ...
- BZOJ.4503.两个串(FFT/bitset)
题目链接 \(Description\) 给定两个字符串S和T,求T在S中出现了几次,以及分别在哪些位置出现.T中可能有'?'字符,这个字符可以匹配任何字符. \(|S|,|T|\leq 10^5\) ...
- 【刷题】BZOJ 4503 两个串
Description 兔子们在玩两个串的游戏.给定两个字符串S和T,兔子们想知道T在S中出现了几次, 分别在哪些位置出现.注意T中可能有"?"字符,这个字符可以匹配任何字符. I ...
- bzoj 4503 两个串 快速傅里叶变换FFT
题目大意: 给定两个\((length \leq 10^5)\)的字符串,问第二个串在第一个串中出现了多少次.并且第二个串中含有单字符通配符. 题解: 首先我们从kmp的角度去考虑 这道题从字符串数据 ...
随机推荐
- elementUI 表格设置表头样式
eader-row-class-name 表头行的 className 的回调方法,也可以使用字符串为所有表头行设置一个固定的 className. Function({row, rowIndex}) ...
- JavaScript遍历对象中所有元素
操作对象如下,属性名不确定: 遍历方法: var temp = new Array(); for(var i in result.datas[0]){ temp.push(result.datas[0 ...
- Java Web 自定义标签
1. 自定义标签 由于在JSP页面中直接嵌入Java代码会导致页面开起来非常混乱,不方便和美工等配合工作,为此,JSP提供了自定义标签技术,可以代替直接嵌入Java代码的方式提供动态逻辑,但自定义 ...
- pyinstaller 打包不成功,提示inporterror 缺少xlrd、xlwt
问题:pyinstaller 打包不成功,提示inporterror 缺少xlrd.xlwt 解决:将 pypiwin 230 改为 219
- Linux - 包不同安装方式
rpm 软件包管理器 安装编译包好的二进制包 方式 rpm -ivh lynx # rpm安装 rpm -e lynx # 卸载包 rpm -e lynx --nodeps # 强制卸载 rpm -q ...
- pyqt5的安装
第一步:需要安装:pip3 install pyqt5 安装工具:pip3 install pyqt5-tools 第二步:打开Pycharm,进入设置,添加外部工具 file-->sett ...
- 啊金学习javascript系列一之javascript整体印象
javascript是一门编程语言,这个是第一个观点.是编程语言,那就拥有编程语言的功能.在我理解之中,编程语言是和计算机打交道的语言,就是我们跟计算机说话用的语言,是用来指挥计算机的.人类能够理解语 ...
- Biorhythms HDU - 1370 (中国剩余定理)
孙子定理: 当前存在三个式子,t%3=2,t%5=3,t%7=2.然后让你求出t的值的一个通解. 具体过程:选取3和5的一个公倍数t1能够使得这个公倍数t1%7==1,然后选取3和7的一个公倍数t2使 ...
- Spring Boot 多模块项目创建与配置 (一) (转)
Spring Boot 多模块项目创建与配置 (一) 最近在负责的是一个比较复杂项目,模块很多,代码中的二级模块就有9个,部分二级模块下面还分了多个模块.代码中的多模块是用maven管理的,每个模块都 ...
- 文加图, 理解Http请求与响应
1. http请求和响应步骤 在讲解OkHttp之前, 我们首先来个高清大图, 看下http请求的整个步骤, 有个整体概念. 2. http每一步详细内容 在一次完整的HTTP通信过程中, Web浏 ...