XJTUOJ #1193. 表象[弹幕偏执症]
2024-10-22 04:49:46
题目
https://oj.xjtuicpc.com/problem/1193
恋恋天下第一!(然而本菜鸡总是被阿空锤死而根本开不了normal)TAT
思路
挺吓人的一道题,看起来很像是要匹配加字符串算法乱搞。但是既然放在套题的第一道想必其实是简单题。(2e6的数据范围基本上是线性算法了,除非出题人卡常)
反正我什么字符串算法都不会,那不妨暴力乱搞一波。我们令\(n=strlen(S),m=strlen(T)\)
考虑S[0]作为前缀,那显然新增种数为\(m\),没有任何重复。
S[1]作为前缀时哪些会重复呢?我们手玩一下数据。S="ababa" T="babab"
ababa babab
a babab
a abab
a bab
a ab
a b
ab babab
ab bab
ab b
不难发现,如果当前的前缀是S[0]到S[i],后缀为T[j]到T[m],当T[j-1]==S[i]时它与之前的情况重复掉了,没有贡献。
所以我们只要对每个字母x预处理出T中有多少后缀使得它前面一位是x即可。
代码
点击查看代码
#include<cstdio>
#include<cstdlib>
#include<cstring>
#define maxn 2000010
#define ll long long
using namespace std;
char S[maxn],T[maxn];
int cnt[26];
int main(){
int n,m,i,j;
ll ans=0;
scanf("%s%s",S,T);
n=strlen(S);
m=strlen(T);
for(i=0;i<m-1;++i) cnt[T[i]-'a']++;
ans+=m;
for(i=1;i<n;++i){
ans+=m-cnt[S[i]-'a'];
}
printf("%lld",ans);
// system("pause");
return 0;
}
最新文章
- Codeforces Round #347 (Div. 2) (练习)
- ProgressDialog的使用
- 修改使用phpstorm创建的模板的默认注释
- [Git] 快速签出与更新所有远程分支.md
- linux下so动态库一些不为人知的秘密(中)
- Oracle锁表查询与解锁
- 未找到约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryServiceRequiredTypeIdentity匹配的导出的解决办法
- Linux安装python3.6
- 关于java多线程中异常捕获的理解
- STM32终端优先级,看过很多感觉这个写的直白易懂
- JS中的事件(对象,冒泡,委托,绑定)
- Android下WPS打开Excel2007版也有问题
- 25条提高iOS App性能的技巧和诀窍
- ";废物利用";也抄袭——废旧喷墨打印机和光驱DIY";绘图仪";
- Canvas帧数和步长实例
- 【成端更新线段树模板】POJ3468-A Simple Problem with Integers
- Oracle用游标删除重复数据
- HDU 4116 Fruit Ninja ( 计算几何 + 扫描线 )
- async-http
- 奥巴马(Obama)获胜演讲全文[中英对照]+高清视频下载