概述
传送门
题目描述
给你两个由小写字母组成的单词 A A A 和 B B B,我们称一个单词为幸运单词,当且仅当它是由 A A A 的某个非空前缀和 B B B 的某个非空后缀拼接而成的( A A A 的前缀在 B B B 的后缀的前面)。
例如,当单词 A A A 为 t r e e tree tree,单词 B B B 为 h e a p heap heap 时, t r a p trap trap 就是一个幸运单词,而 t r a e p , a p t r traep,aptr traep,aptr 则不是。
请问对于给定的单词 A A A 和 B B B,共有多少个不同的幸运单词?
输入格式
输入包含两行,第一行为单词 A,第二行为单词 B。
输出格式
输出一个整数,表示幸运单词的总个数。
样例输入
cat
dog
样例输出
9
数据范围与提示
对
20
%
20%
20%的数据,单词A的长度
l
e
n
g
t
h
A
length_A
lengthA和单词B的长度
l
e
n
g
t
h
B
length_B
lengthB满足,
1
≤
l
e
n
g
t
h
A
,
l
e
n
g
t
h
B
≤
100
1 leq length_A,length_B leq 100
1≤lengthA,lengthB≤100;
对
40
%
40%
40%的数据,
1
≤
l
e
n
g
t
h
A
,
l
e
n
g
t
h
B
≤
1
0
3
1 leq length_A,length_B leq 10^3
1≤lengthA,lengthB≤103;
对
100
%
100%
100%的数据,
1
≤
l
e
n
g
t
h
A
,
l
e
n
g
t
h
B
≤
1
0
5
1 leq length_A,length_B leq 10^5
1≤lengthA,lengthB≤105 。
题解
先上结论:答案是
l
e
n
g
t
h
A
×
l
e
n
g
t
h
B
−
∑
i
x
i
×
y
i
length_A times length_B - sum_i x_i times y_i
lengthA×lengthB−∑ixi×yi(其中
x
i
,
y
i
x_i,y_i
xi,yi分别是单词A、单词B中字母i的个数)
理解的方式有很多,我的理解是这样的:(两个单词长度相乘不用说)
单词B的后缀等价于前后反转后的前缀倒过来。
把单词A中的字母表示为
a
1
,
a
2
,
.
.
.
,
a
n
a_1,a_2,...,a_n
a1,a2,...,an,反转后的单词B中的字母表示为
b
1
,
b
2
,
.
.
.
,
b
m
b_1,b_2,...,b_m
b1,b2,...,bm。
易知只有长度相同的单词才会出现重复的情况。那么,随便举个例子,长度为5的拼接后单词可能为:
a
1
b
4
b
3
b
2
b
1
a_1b_4b_3b_2b_1
a1b4b3b2b1
a
1
a
2
b
3
b
2
b
1
a_1a_2b_3b_2b_1
a1a2b3b2b1
a
1
a
2
a
3
b
2
b
1
a_1a_2a_3b_2b_1
a1a2a3b2b1
a
1
a
2
a
3
a
4
b
1
a_1a_2a_3a_4b_1
a1a2a3a4b1
其中,若
a
2
a_2
a2和
b
4
b_4
b4相同,就会带来一次重复的计算。
若
a
3
a_3
a3和
b
3
b_3
b3相同,也会带来一次重复的计算。
……
然而我们发现,除了A的首字母和B的尾字母,在拼接后单词不同的长度下,所有的相同字母都可以这样组成配对,带来重复的计算。所以就可以推出重复计算的总个数。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int M=1e5+5;
ll ans,al,bl,bka[30],bkb[30];
char A[M],B[M];
int main(){
scanf("%s%s",&A,&B);
al=strlen(A);
bl=strlen(B);
for(int i=1;i<al;i++) bka[(int)(A[i]-'a')]++;
for(int i=0;i<bl-1;i++) bkb[(int)(B[i]-'a')]++;
ans+=al*bl;
for(int i=0;i<=25;i++) ans-=bka[i]*bkb[i];
printf("%lldn",ans);
return 0;
}
Thanks!
最后
以上就是曾经枫叶为你收集整理的【dtoj begin#4211】「TDog 2021 S Day5 」单词的全部内容,希望文章能够帮你解决【dtoj begin#4211】「TDog 2021 S Day5 」单词所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复