BZOJ4503 两个串 【fft】

题目链接

BZOJ4503

题解

水水题。
和残缺的字符串那题几乎是一样的
同样转化为多项式
同样TLE
同样要手写一下复数才A

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<complex>
#include<cmath>
#include<map>
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define mp(a,b) make_pair<int,int>(a,b)
#define cls(s) memset(s,0,sizeof(s))
#define cp pair<int,int>
#define LL long long int
using namespace std;
const int maxn = 400005,maxm = 100005,INF = 1000000000;
inline int read(){int out = 0,flag = 1; char c = getchar();while (c < 48 || c > 57){if (c == '-') flag = -1; c = getchar();}while (c >= 48 && c <= 57){out = (out << 3) + (out << 1) + c - 48; c = getchar();}return out * flag;
}
struct E{double a,b;E(){}E(double x,double y):a(x),b(y) {}E(int x,int y):a(x),b(y) {}inline E operator =(const int& b){this->a = b; this->b = 0;return *this;}inline E operator =(const double& b){this->a = b; this->b = 0;return *this;}inline E operator /=(const double& b){this->a /= b; this->b /= b;return *this;}
};
inline E operator *(const E& a,const E& b){return E(a.a * b.a - a.b * b.b,a.a * b.b + a.b * b.a);
}
inline E operator *=(E& a,const E& b){return a = E(a.a * b.a - a.b * b.b,a.a * b.b + a.b * b.a);
}
inline E operator +(const E& a,const E& b){return E(a.a + b.a,a.b + b.b);
}
inline E operator -(const E& a,const E& b){return E(a.a - b.a,a.b - b.b);
}
const double pi = acos(-1);
int R[maxn];
void fft(E* a,int n,int f){for (int i = 0; i < n; i++) if (i < R[i]) swap(a[i],a[R[i]]);for (int i = 1; i < n; i <<= 1){E wn(cos(pi / i),f * sin(pi / i));for (int j = 0; j < n; j += (i << 1)){E w(1,0),x,y;for (int k = 0; k < i; k++,w = w * wn){x = a[j + k],y = w * a[j + k + i];a[j + k] = x + y; a[j + k + i] = x - y;}}}if (f == -1) for (int i = 0; i < n; i++) a[i] /= n;
}
E A[maxn],B[maxn];
int N,M,L,ans[maxn],ansi;
double C[maxn];
char S[maxn],T[maxn];
int main(){scanf("%s",S); N = strlen(S);scanf("%s",T); M = strlen(T);reverse(T,T + M);int n,m; double t;m = N - 1 + M - 1; L = 0;for (n = 1; n <= m; n <<= 1) L++;for (int i = 1; i < n; i++) R[i] = (R[i >> 1] >> 1) | ((i & 1) << (L - 1));for (int i = 0; i < N; i++){t = S[i] - 'a' + 1;A[i] = t * t;}for (int i = 0; i < M; i++)if (T[i] == '?') B[i] = 0;else B[i] = T[i] - 'a' + 1;fft(A,n,1); fft(B,n,1);for (int i = 0; i < n; i++) A[i] *= B[i];fft(A,n,-1);for (int i = 0; i < N; i++) C[i] += floor(A[i].a + 0.5);for (int i = 0; i < N; i++) A[i] = 1;for (int i = N; i < n; i++) A[i] = 0;for (int i = 0; i < M; i++)if (T[i] == '?') B[i] = 0;else {t = T[i] - 'a' + 1;B[i] = t * t * t;}for (int i = M; i < n; i++) B[i] = 0;fft(A,n,1); fft(B,n,1);for (int i = 0; i < n; i++) A[i] *= B[i];fft(A,n,-1);for (int i = 0; i < N; i++) C[i] += floor(A[i].a + 0.5);for (int i = 0; i < N; i++)A[i] = S[i] - 'a' + 1;for (int i = N; i < n; i++) A[i] = 0;for (int i = 0; i < M; i++)if (T[i] == '?') B[i] = 0;else {t = T[i] - 'a' + 1;B[i] = t * t;}for (int i = M; i < n; i++) B[i] = 0;fft(A,n,1); fft(B,n,1);for (int i = 0; i < n; i++) A[i] *= B[i];fft(A,n,-1);for (int i = 0; i < N; i++) C[i] -= 2 * floor(A[i].a + 0.5);for (int i = M - 1; i < N; i++)if (fabs(C[i]) < 0.1) ans[++ansi] = i - M + 1;printf("%d\n",ansi);REP(i,ansi) printf("%d\n",ans[i]);return 0;
}

转载于:https://www.cnblogs.com/Mychael/p/9112828.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465838.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日一题(42)—— 已知一个数组table,用一个宏定义,求出数据的元素个数

已知一个数组table&#xff0c;用一个宏定义&#xff0c;求出数据的元素个数。 // 总大小除以第一个元素的大小 #define TNTBL (sizeof(table)/sizeof(table[0]))

新公司上班第一天

大家好&#xff0c;文章转自我的朋友helloworld&#xff0c;文中的我并不是我&#xff0c;感谢大家阅读&#xff0c;转载&#xff0c;在看。Hello 各位小伙伴&#xff0c;周一愉快~今天是我到新公司上班的第一天&#xff0c;入职新公司&#xff0c;就好像刚刚谈恋爱一样&#x…

[CTO札记]从Cloud Computing看战略决策:想做、能做与可做 -

1&#xff09;想做--未来方向很多人已经意识到&#xff0c;Cloud Computing未来将是基础设施&#xff0c;扮演水、电、气的角色。可以说&#xff0c;Cloud Computing是很多互联网、电信大公司想做的事。因为&#xff1a;》不仅重要&#xff08;大公司都不想自己的命运掌握在别人…

JAVA基础学习之路(三)类定义及构造方法

类的定义及使用 一&#xff0c;类的定义 class Book {//定义一个类int price;//定义一个属性int num;public static int getMonney(int price, int num) {//定义一个方法return price*num;} }public class test2 {public static void main(String args[]) {Book monney new B…

电子火折子的电路原理

d▲本文要分析的电路看古装剧时&#xff0c;不时可以看到这样的场景&#xff1a;有人从怀里掏出一个“火折子”&#xff0c;对着吹一吹就点着了火&#xff0c;觉得很神奇&#xff1a;更加神奇的是&#xff0c;有才的电子工程师们&#xff0c;重新发明了火折子&#xff0c;也就是…

整理了二个基本的css库(高手请绕道)

前一阵公司唯一的前端开发人员走掉了&#xff0c;短期内也没人顶上来&#xff0c;所以切页面/js这种活儿只能咱自个儿揽过来了&#xff0c;花了大半天捣鼓了下css,整理了二个基本的css库&#xff0c;方便以后切页面&#xff0c;贴在这里备份 说明:p.css ---即public.css&#x…

每日一题(43)—— 数组越界

下面这个程序执行后会有什么错误或者效果: #define  MAX  255 int main() {unsigned char A[MAX],i;for (i0;i<MAX;i){A[i]i;} }解答&#xff1a;死循环加数组越界访问&#xff08;C/C不进行数组越界检查&#xff09; MAX255 数组A的下标范围为:0..MAX-1,这是其一.. 其…

P1133 教主的花园 (动态规划)

题目描述 教主有着一个环形的花园&#xff0c;他想在花园周围均匀地种上n棵树&#xff0c;但是教主花园的土壤很特别&#xff0c;每个位置适合种的树都不一样&#xff0c;一些树可能会因为不适合这个位置的土壤而损失观赏价值。 教主最喜欢 3种树&#xff0c;这3种树的高度分别…

如何快速构建嵌入式全栈知识体系?

嵌入式是一门交叉学科。一个嵌入式电子产品&#xff08;比如手机&#xff09;从底层到上层&#xff0c;一般会涉及半导体芯片、电子电路、计算机、操作系统、多媒体等不同专业领域的知识。很多从事嵌入式开发的朋友&#xff0c;通常来自不同的专业&#xff08;电子、电气、计算…

台湾高僧称游戏中杀人是罪业死后要下地狱

台湾著名高僧净空法师的一段谈因果报应的视频&#xff0c;近来被上传到网络上&#xff0c;引发网友特别是游戏玩家的极大反应。净空法师在这段视频中说&#xff0c;在电子游戏中杀人所造下 的罪业和杀真人是相同的&#xff0c;死后肯定会下阿鼻地狱&#xff0c;出来后也还要慢慢…

SpringBoot 封装返回类以及session 添加获取

1、创建返回类Result public class Result<T>{/*错误码*/private Integer code;/*提示信息 */private String msg;/*具体内容*/private T data;public Integer getCode() {return code;}public void setCode(Integer code) {this.code code;}public String getMsg() {r…

每日一题(44)—— 请列举一个软件中时间换空间或者空间换时间的例子

请列举一个软件中时间换空间或者空间换时间的例子&#xff1a; --->时优 void swap(int a,int b) {int c;ca;ab;bc; } --->空优 void swap(int a,int b) {aab;ba-b;aa-b; }

迅雷的声音:摆脱视频产业的经济化困境

两个视频版权联盟之间的交锋日前到了白热化阶段&#xff0c;居然在深圳发生了两个发布会唱对台的戏剧化场面。迅雷发表声明“承诺推动视频市场正版化”&#xff0c;迅雷CEO甚至表示要去公证处跟对手“比谁的版权多”。在我看来&#xff0c;虽然去公证处大可不必&#xff0c;但至…

嵌入式系统开发者需要掌握什么技术?

大家好&#xff0c;我是小嵌&#xff0c;在知乎上看到这个问题&#xff0c;其中有一个答主的答案很经典&#xff0c;特此分享给大家。说实话&#xff0c;问题中嵌入式开发这个话题有点庞大&#xff0c;毕竟它涵盖的领域和范围很宽泛。作为一个在嵌入式软件开发方面工作了十多年…

做决定要趁早

之前接触的一个读者朋友&#xff0c;几个月前跟我咨询了问题&#xff0c;那时候因为有个决定困扰他&#xff0c;已经快抑郁了&#xff0c;不过到现在为止&#xff0c;还没有做决定。做决定这个事情&#xff0c;我希望不要拖太久&#xff0c;不要咨询太多无关的人&#xff0c;做…

2009第二届C++技术大会即将在上海隆重召开

2009第二届C技术大会即将在上海隆重召开 作为软件开发语言的翘楚&#xff0c;C对于现代软件的发展功不可没&#xff0c;特别是在系统软件开发领域&#xff0c;C扮演着关键的角色。中国作为全球软件产业最具潜力的市场&#xff0c;越来越多的企业认识到了C及相关系统软件技术在软…

大数据开发你需要知道的十个技术

前言 “当你不创造东西时&#xff0c;你只会根据自己的感觉而不是能力去看待问题。” – WhyTheLuckyStiff 汇总一些自己在大数据路上走过的弯路&#xff0c;愿大家不再掉坑… 1.分布式存储 传统化集中式存储存在已有一段时间。但大数据并非真的适合集中式存储架构。Hadoop设计…

每日一题(45)—— 字符数组找错

void test2() {char str1[10], str2[10];int i;for(i0; i<10; i)str1[i] a;strcpy( str2, str1 ); }这段代码有什么问题&#xff1f; 解答&#xff1a;如果面试者指出字符数组str1不能在数组内结束可以给3分&#xff1b;如果面试者指出strcpy(str2, str1)调用使得从str1复制…

华为这个事,是不是刷KPI?

最近闹的比较热闹的事情是&#xff0c;华为有人提交到Linux 上的代码被审核员点名批评刷KPI&#xff0c;并且&#xff0c;这个邮件还上了头条。提交的代码修改如下From: Zhen Lei <thunder.leizhenhuawei.com> To: Kees Cook <keescookchromium.org>,Anton Voronts…

前端小demo——全选和全不选

模拟购物车&#xff0c;实现全选或者全不选&#xff0c;或者其中任意一件单品单选的效果。 点击顶部复选框实现全选 列表中任意一项未选中&#xff0c;顶部复选框就是未选中的状态 <!DOCTYPE html> <html><head lang"en"><meta charset"UT…