Problem C. Concatenation
Input file: concatenation.in
Output file: concatenation.out
Time limit: 2 seconds
Memory limit: 256 megabytes
Famous programmer Gennady likes to create new words. One way to do it is to concatenate existing
words. That means writing one word after another. For example, if he has words “cat” and “dog”, he
would get a word “catdog”, that could mean something like the name of a creature with two heads: one
cat head and one dog head.
Gennady is a bit bored of this way of creating new words, so he has invented another method. He takes
a non-empty prefix of the first word, a non-empty suffix of the second word, and concatenates them. For
example, if he has words “tree” and “heap”, he can get such words as “treap”, “tap”, or “theap”. Who
knows what they could mean?
Gennady chooses two words and wants to know how many different words he can create using his new
method. Of course, being a famous programmer, he has already calculated the answer. Can you do the
same?
Input
Two lines of the input file contain words chosen by Gennady. They have lengths between 1 and 100 000
characters and consist of lowercase English letters only.
Output
Output one integer — the number of different words Gennady can create out of words given in the input
file.
Examples
concatenation.in concatenation.out
cat
dog
9
tree
heap
14
题意:让数组a和数组b的长度相乘然后减去a中a和b想同的字母的个数
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll aa, bb, res, i;
char a[100005],b[100005];
int sum[200];
int main()
{
scanf("%s",a);
scanf("%s",b);
aa = strlen(a);
bb = strlen(b);
memset(sum,0,sizeof(sum));
res = aa * bb;
for(i = 1; i < aa ; i++)
++sum[a[i]];
for(i = 0 ; i < bb - 1; i++)
res -= sum[b[i]];
printf("%lld\n",res);
return 0;
}