题解:P16287 [蓝桥杯 2026 省 Python A 组] 单词合并

· · 题解

P16287 [蓝桥杯 2026 省 Python A 组] 单词合并

分析:
一道模拟题,遍历两个单词,如果它们的长度相差为 1,就遍历它们的字符,如果有不一样的,就将长度较短的单词对应的遍历变量减 1,就相当于删除长度较长的单词一个字符。

代码:

#include<bits/stdc++.h>
using namespace std;
int n,ans;
char s[10001][21];
int main() {
//  freopen("a.in","r",stdin);
    scanf("%d\n",&n);
    for(int i=1; i<=n; i++)scanf(" %s",s[i]);
    for(int i=1; i<=n; i++) {
        for(int j=i+1; j<=n; j++) {
            int l1=strlen(s[i]),l2=strlen(s[j]);
            if(abs(l1-l2)==1) {//如果长度相差为1
                int a=0;//记录删了多少个字符
                for(int k=0,w=0; k<l1&&w<l2; k++,w++)
                    if(s[i][k]!=s[j][w]) {
                        if(l1<l2)k--;
                        else w--;
                        if(++a==2)break;//如果为2,就跳出
                    }
                if(a<2)ans++;//不要写成a==1,因为a可以等于0
            }
        }
    }
    printf("%d",ans<<1);//要乘2,因为(i,j)和(j,i)是两种方案
    return 0;
}