boxmoe_header_banner_img

でも夢はきらめない。

文章导读

Educational Codeforces Round 170 (Rated for Div. 2) – 2025A


avatar
akitama 2024年10月21日 425

A. Two Screens

查看原题

分析

当找到第一个不同的字符时,通过 i != 0 来判断是否有公共前缀,计算操作次数并退出循环。
如果没有遇到不同字符,则再通过 !isDifferent 处理。

//A Two Screens Written By Akitama
#include <iostream>
#include <cstring>
#define akitama return 0
using namespace std;

int main() {
    int q;cin >> q;
    int ans[q];
    int tmp = q;
    while (q--) {
        char c1[105], c2[105];
        cin >> c1 >> c2;
        int len1 = strlen(c1), len2 = strlen(c2);
        int min_len = len1 < len2 ? len1 : len2;
        int max_len = len1 > len2 ? len1 : len2;

        bool isDifferent = false; 
        int op = 0;
        for (int i = 0; i < min_len; i++) {
            if (c1[i] != c2[i]) {
                i != 0 ? ans[tmp - q - 1] = (i + 1 + len1 - i + len2 - i) : ans[tmp - q - 1] = (len1 + len2);
                isDifferent = true;
                break; 
            }
        }

        if (!isDifferent) {
            len1 + len2 < max_len + 1 ? ans[tmp - q - 1] = len1 + len2 : ans[tmp - q - 1] = max_len + 1; 

        }
    }
    for (int i = 0; i <= tmp - 1; i ++) {
        cout << ans[i] << endl;
    }

    akitama;
}

赛后反思&代码优化

在时间复杂度和代码简洁性上还有一些可以改进的地方:避免重复计算字符串长度、简化分支判断和即时输出,提升代码的效率和可读性。

#include <iostream>
#include <cstring>
using namespace std;
int main() {
    int q;cin >> q;
    while (q--) {
        char c1[105], c2[105];
        cin >> c1 >> c2;
        int len1 = strlen(c1), len2 = strlen(c2);
        int lcp = 0;
        while (lcp < len1 && lcp < len2 && c1[lcp] == c2[lcp])
            lcp++;
        if (lcp =\= 0)//网站问题 此处是正常的等于号
            cout << len1 + len2 << endl;
        else
            cout << len1 + len2 - lcp + 1 << endl;
    }
    return 0;
}


评论(已关闭)

评论已关闭