CF1090J Two Prefixes
神仙题++
还是在某校梁大讲的题qaq
我们考虑容斥
也就是本质不同字串=全部-重复的
我们只需要求重复的即可
考虑相同的s=ab 我们用长度最长的a作为代表串
如果存在一个a'b'且|a'|>|a| 分析可以知道必然有b'是b的border 如图
那么显然我们存在b的最长border b''使a''b''=ab
这个可以kmp求得f[i]为border
然后我们在考虑b的一段前缀在a中出现的次数
那么我们可以通过exkmp求得g[i]表示以i开头的最长长度 然后接下来反向前缀和更新即可
一个方便的做法是把s串和t串拼到一起然后做exkmp
还有一个小bug就是memcpy的时候sizeof是一整个数组...不能写一个位置...调了我一上午QAQ
代码参考了bestfy学姐的 非常简洁qwq
//Love and Freedom.
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#define ll long long
#define inf 20021225
#define N 200005
using namespace std; char ch[N],s[N],t[N];
int f[N],g[N],ans[N];
void kmp(int n)
{
for(int i=;i<=n;i++)
{
f[i]=f[i-];
while(f[i]&&ch[f[i]+]!=ch[i]) f[i]=f[f[i]];
f[i]=(ch[f[i]+]==ch[i]?f[i]+:f[i]);
}
}
void exkmp(int n)
{
int ms=;
for(int i=;i<=n;i++)
{
g[i]=max(,min(g[i-ms+],ms+g[ms]-i));
while(i+g[i]<=n&&ch[i+g[i]]==ch[+g[i]]) g[i]++;
if(i+g[i]>ms+g[ms]) ms=i;
}
g[]=n;
}
int main()
{
//freopen("in.txt","r",stdin);
scanf("%s%s",t+,s+); int n=strlen(s+);
memcpy(ch+,s+,sizeof(char)*(n+)); kmp(n);
int ls=n,lt=strlen(t+);// printf("%s",ch+1);
ch[++n]='*'; for(int i=;i<=lt;i++) ch[++n]=t[i];
exkmp(n);
for(int i=ls+;i<=n;i++) ans[g[i]]++;
for(int i=ls;i>=;i--) ans[i]+=ans[i+];
ll fin=1ll*lt*ls;
for(int i=;i<=ls;i++) if(f[i]) fin-=ans[i-f[i]];
printf("%I64d\n",fin);
return ;
}
CF1090J Two Prefixes的更多相关文章
- POJ2001Shortest Prefixes[Trie]
Shortest Prefixes Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 17683 Accepted: 768 ...
- POJ2001 Shortest Prefixes
Description A prefix of a string is a substring starting at the beginning of the given string. The p ...
- poj 2001:Shortest Prefixes(字典树,经典题,求最短唯一前缀)
Shortest Prefixes Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 12731 Accepted: 544 ...
- POJ 2001:Shortest Prefixes
Shortest Prefixes Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 16782 Accepted: 728 ...
- OpenJudge/Poj 2001 Shortest Prefixes
1.链接地址: http://bailian.openjudge.cn/practice/2001 http://poj.org/problem?id=2001 2.题目: Shortest Pref ...
- poj 2001 Shortest Prefixes trie入门
Shortest Prefixes 题意:输入不超过1000个字符串,每个字符串为小写字母,长度不超过20:之后输出每个字符串可以简写的最短前缀串: Sample Input carbohydrate ...
- codeforces432D Prefixes and Suffixes(kmp+dp)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud D. Prefixes and Suffixes You have a strin ...
- Shortest Prefixes(trie树唯一标识)
Shortest Prefixes Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 15948 Accepted: 688 ...
- Codeforces 432D Prefixes and Suffixes(KMP+dp)
题目连接:Codeforces 432D Prefixes and Suffixes 题目大意:给出一个字符串,求全部既是前缀串又是后缀串的字符串出现了几次. 解题思路:依据性质能够依据KMP算法求出 ...
随机推荐
- Oracle诊断: 服务器启后,无法连接
Oracle 服务器启后,使用Toad 客户端连接oracle 时候,遇到下面的错误: oracle ORA-12514: TNS: no listener TNS: listener does no ...
- 清北学堂2019NOIP提高储备营DAY4
今天只有一上午,讲的东西不多,这里就整理一下高精的东西,数论部分请见my blog 高精度: 先讲一讲进制问题:十进制的二进制表示:以10为例, 10的二进制表示为1010 10的三进制表示为101 ...
- error: exportArchive: You don’t have permission to save the file “HelloWorld.ipa” in the folder “HelloWorld”.
成功clean环境和生成archive文件之后,最后一步导出ipa包,遇到了权限问题: you don’t have permission to save the file “HelloWorld.i ...
- 百度人脸识别python调用例子
# 首先pip install baidu-aip # SDK文档链接http://ai.baidu.com/docs#/Face-Python-SDK/top import base64 from ...
- exceptions: django2.2/ mysql ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3
在centos部署python应用后访问页面,显示如下异常信息 报错环境 python=3.6,django=2.2……django.core.exceptions.ImproperlyConfigu ...
- 【opencv】opencv图像识别的一些基础的基础函数的使用方法
import cv2 import numpy as np from matplotlib import pyplot as plt pic_path = "deal_with.png&qu ...
- vue-router路由详细
由于Vue在开发时对路由支持的不足,于是官方补充了vue-router插件.vue的单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来.传统的页面应用,是用一些超链接来实现 ...
- 个人对BFC的见解
BFC:块级格式化上下文,它是指一个独立的块级渲染区域,只有Block-level BOX参与,该区域拥有一套渲染规则来约束块级盒子的布局,且与区域外部无关. BFC的生成 既然上文提到BFC是一块渲 ...
- Netty编码的艺术
Netty 编码器原理和数据输出: Netty 默认提供了丰富的编解码框架供用户集成使用,我们只对较常用的Java 序列化编码器进行讲解.其它的编码器,实现方式大同小异.其实编码器和解码器比较类似, ...
- Yarn 工作机制
1.工作机制详述 (1)MR程序提交到客户端所在的节点. (2)YarnRunner向ResourceManager申请一个Application. (3)RM将该应用程序的资源路径返回给YarnRu ...