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的角度去考虑 这道题从字符串数据 ...
随机推荐
- Python学习笔记9-多线程和多进程
一.线程&进程 对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程, ...
- Selenium自动化Page模式(Python)
Selenium是当前主流的web自动化工具,提供了多种浏览器的支持(Chrome,Firefox, IE等等),当然大家也可以用自己喜欢的语言(Java,C#,Python等)来写用例,很容易上手. ...
- Guava Immutable 不可变集合
Immutable是为了创建不可变集合使用,不可变集合在很多情况下能提高系统性能.一般使用 .of()或者.builder()<>().put().build()初始化创建不可变集合
- android 获取图库中展示到界面中
layout: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns: ...
- 串行动画组QSequentialAnimationGroup
按顺序执行动画 该类就是用来按照动画添加顺序来执行动画的.我们只用实例化该类,然后通过调用addAnimation()或者insertAnimation()方法把各个动画添加进去就可以了 import ...
- jquery菜单插件
原理很简单. 涉及到知识点: 1.jquery的position注意这里是jquery的position,不是css的position offset的概念 2.>的概念. 3..ulh>l ...
- oracle巡检脚本备份
重做日志生成情况,一天生成日志大小:select round(sum(blocks*block_size)/1024/1024/1024,2) BLOCK from v\$archived_log w ...
- TortoiseSVN常用配置
在Windows下推荐使用乌龟(Tortoise)SVN客户端. TortoiseSVN 是 Subversion 版本控制系统的一个免费开源客户端,可以超越时间的管理文件和目录. 文件保存在中央版本 ...
- Json对象和字符串互相转换 数据拼接 JSON使用方式
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 一.JSON字符串转换为JSON对象: eval() 和 JSON.parse eg- json字符串: ...
- 解决LoggerFactory is not a Logback LoggerContext but Logback is on the classpath
因为引用了log4j2同时还引用了logback