1 条题解

  • 0
    @ 2025-8-24 22:26:12

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar kkxacj
    Full of Hope.

    搬运于2025-08-24 22:26:12,当前版本为作者最后更新于2023-05-17 19:11:44,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    题目传送门

    引言

    这个蒟蒻没有认真读题,交了几遍才过,写个题解纪念一下。

    思路

    一道简单的模拟,但要注意细节。

    拿样例来说

    cat
    dog
    
    分别可以组成
    
    cg cog cdog cag caog cadog catg catog catdog
    
    这九种可能。
    

    那么,在没有构成重复单词的情况下,它一共可以构成第一个单词的字母个数乘上第二个单词的字母个数,现在我们需要知道如何去掉重复单词,那么,请看第二个样例

    tree
    heap
    
    构成的不再展示,这里展示重复单词
    
    (tre eap  tree ap)  (tre ap  tr eap)
    

    不难发现,重复单词就是两个单词相同的字母数量乘积。

    注意:他的构成方法是:使用第一个单词的非空前缀,第二个单词的非空后缀。

    code

    #include<bits/stdc++.h>
    using namespace std;
    long long sum,ans,a[60],b[60];
    string s,s1;
    int main()
    {
    	cin >> s >> s1;
    	ans = s.size() * s1.size();
    	for(int i = 1;i < s.size();i++) a[s[i] - 'a']++;
    	for(int i = 0;i < s1.size() - 1;i++) b[s1[i] - 'a']++;
    	for(int i = 0;i < 26;i++) sum += a[i] * b[i];
    	printf("%lld",ans - sum);
    	return 0;
    }
    
    
    
    • 1

    信息

    ID
    6204
    时间
    2000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者