社区讨论

样例全过,求调试/hack并解释,必关

P2395BBCode转换Markdown参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mlrj7yt3
此快照首次捕获于
2026/02/18 12:28
24 小时前
此快照最后确认于
2026/02/19 08:32
4 小时前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
string s, t1, t2, ans;
stack<int> st;
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    while (getline(cin, t1)) {
        s += t1 + "\n";
    }
    int len = s.length();
    s = " " + s + "                    ";
    t1 = "";
    t2 = "";
    for (int i = 1; i <= len; ++i) {
        if (s[i] == '[') {
            if (s[i + 1] != '/') {
                if (s[i + 1] == 'h' && s[i + 2] == '1' && s[i + 3] == ']') {
                    st.push(1);
                    while (s[i] != ']') ++i;
                }
                else if (s[i + 1] == 'h' && s[i + 2] == '2' && s[i + 3] == ']') {
                    st.push(2);
                    while (s[i] != ']') ++i;
                }
                else if (s[i + 1] == 'i' && s[i + 2] == ']') {
                    st.push(3);
                    while (s[i] != ']') ++i;
                }
                else if (s[i + 1] == 'b' && s[i + 2] == ']') {
                    st.push(4);
                    while (s[i] != ']') ++i;
                }
                else if (s[i + 1] == 'u' && s[i + 2] == 'r' && s[i + 3] == 'l' && s[i + 4] == '=') {
                    st.push(5);
                    while (s[i] != '=') ++i;
                }
                else if (s[i + 1] == 'i' && s[i + 2] == 'm' && s[i + 3] == 'g' && s[i + 4] == '=') {
                    st.push(6);
                    while (s[i] != '=') ++i;
                }
                else if (s[i + 1] == 'q' && s[i + 2] == 'u' && s[i + 3] == 'o' && s[i + 4] == 't' && s[i + 5] == 'e' && s[i + 6] == ']') {
                    while (i <= len && !(s[i] == '[' && s[i + 1] == '/' && s[i + 2] == 'q' && s[i + 3] == 'u' && s[i + 4] == 'o' && s[i + 5] == 't' && s[i + 6] == 'e' && s[i + 7] == ']')) ++i;
                    if (s[i] == '[' && s[i + 1] == '/' && s[i + 2] == 'q' && s[i + 3] == 'u' && s[i + 4] == 'o' && s[i + 5] == 't' && s[i + 6] == 'e' && s[i + 7] == ']') i += 7;
                    else {
                        cout << "Unclosed Mark";
                        return 0;
                    }
                }
                else {
                    st.push(100);
                }
            }
            else {
                if (s[i + 2] == 'h' && s[i + 3] == '1' && s[i + 4] == ']') {
                    if (st.empty() || st.top() != 1) {
                        cout << "Match Error";
                        return 0;
                    }
                    st.pop();
                    while (s[i] != ']') ++i;
                }
                else if (s[i + 2] == 'h' && s[i + 3] == '2' && s[i + 4] == ']') {
                    if (st.empty() || st.top() != 2) {
                        cout << "Match Error";
                        return 0;
                    }
                    st.pop();
                    while (s[i] != ']') ++i;
                }
                else if (s[i + 2] == 'i' && s[i + 3] == ']') {
                    if (st.empty() || st.top() != 3) {
                        cout << "Match Error";
                        return 0;
                    }
                    st.pop();
                    while (s[i] != ']') ++i;
                }
                else if (s[i + 2] == 'b' && s[i + 3] == ']') {
                    if (st.empty() || st.top() != 4) {
                        cout << "Match Error";
                        return 0;
                    }
                    st.pop();
                    while (s[i] != ']') ++i;
                }
                else if (s[i + 2] == 'u' && s[i + 3] == 'r' && s[i + 4] == 'l' && s[i + 5] == ']') {
                    if (st.empty() || st.top() != 5) {
                        cout << "Match Error";
                        return 0;
                    }
                    st.pop();
                    while (s[i] != ']') ++i;
                }
                else if (s[i + 2] == 'i' && s[i + 3] == 'm' && s[i + 4] == 'g' && s[i + 5] == ']') {
                    if (st.empty() || st.top() != 6) {
                        cout << "Match Error";
                        return 0;
                    }
                    st.pop();
                    while (s[i] != ']') ++i;
                }
                else {
                    cout << "Match Error";
                    return 0;
                }
            }
        }
    }
    if (!st.empty()) {
        cout << "Unclosed Mark";
        return 0;
    }
    bool flag = false;
    t1 = "";
    t2 = "";
    for (int i = 1; i <= len; ++i) {
        if (s[i] == '[') {
            if (s[i + 1] != '/') {
                if (s[i + 1] == 'h' && s[i + 2] == '1' && s[i + 3] == ']') {
                    ans += "# ";
                    while (s[i] != ']') ++i;
                }
                else if (s[i + 1] == 'h' && s[i + 2] == '2' && s[i + 3] == ']') {
                    ans += "## ";
                    while (s[i] != ']') ++i;
                }
                else if (s[i + 1] == 'i' && s[i + 2] == ']') {
                    ans += "*";
                    while (s[i] != ']') ++i;
                }
                else if (s[i + 1] == 'b' && s[i + 2] == ']') {
                    ans += "__";
                    while (s[i] != ']') ++i;
                }
                else if (s[i + 1] == 'u' && s[i + 2] == 'r' && s[i + 3] == 'l' && s[i + 4] == '=') {
                    t1 = "";
                    t2 = "";
                    while (s[i - 1] != '=') ++i;
                    while (s[i] != ']') t1 += s[i], ++i;
                    ++i;
                    while (s[i] != '[') t2 += s[i], ++i;
                    while (s[i] != ']') ++i;
                    ans += "[";
                    ans += t2;
                    ans += "]";
                    ans += "(";
                    ans += t1;
                    ans += ")";
                }
                else if (s[i + 1] == 'i' && s[i + 2] == 'm' && s[i + 3] == 'g' && s[i + 4] == '=') {
                    t1 = "";
                    t2 = "";
                    while (s[i - 1] != '=') ++i;
                    while (s[i] != ']') t1 += s[i], ++i;
                    while (s[i] != '[') t2 += s[i], ++i;
                    while (s[i] != ']') ++i;
                    ans += "!";
                    ans += "[";
                    ans += t2;
                    ans += "]";
                    ans += "(";
                    ans += t1;
                    ans += ")";
                }
                else if (s[i + 1] == 'q' && s[i + 2] == 'u' && s[i + 3] == 'o' && s[i + 4] == 't' && s[i + 5] == 'e' && s[i + 6] == ']') {
                    if (s[i + 7] == '\n');
                    else if (i != 1 && s[i - 1] != '\n') ans += "\n> ";
                    else ans += "> ";
                    while (s[i] != ']') ++i;
                    ++i;
                    while (i <= len && !(s[i] == '[' && s[i + 1] == '/' && s[i + 2] == 'q' && s[i + 3] == 'u' && s[i + 4] == 'o' && s[i + 5] == 't' && s[i + 6] == 'e' && s[i + 7] == ']')) {
                        ans += s[i];
                        if (s[i] == '\n' && !(s[i + 1] == '[' && s[i + 2] == '/' && s[i + 3] == 'q' && s[i + 4] == 'u' && s[i + 5] == 'o' && s[i + 6] == 't' && s[i + 7] == 'e' && s[i + 8] == ']')) ans += "> ";
                        ++i;
                    }
                    i += 7;
                }
            }
            else {
                if (s[i + 2] == 'h' && s[i + 3] == '1' && s[i + 4] == ']') {
                    while (s[i] != ']') ++i;
                    ans += " #";
                }
                else if (s[i + 2] == 'h' && s[i + 3] == '2' && s[i + 4] == ']') {
                    while (s[i] != ']') ++i;
                    ans += " ##";
                }
                else if (s[i + 2] == 'i' && s[i + 3] == ']') {
                    while (s[i] != ']') ++i;
                    ans += "*";
                }
                else if (s[i + 2] == 'b' && s[i + 3] == ']') {
                    while (s[i] != ']') ++i;
                    ans += "__";
                }
                else if (s[i + 2] == 'u' && s[i + 3] == 'r' && s[i + 4] == 'l' && s[i + 5] == ']') {
                    while (s[i] != ']') ++i;
                }
                else if (s[i + 2] == 'i' && s[i + 3] == 'm' && s[i + 4] == 'g' && s[i + 5] == ']') {
                    while (s[i] != ']') ++i;
                }
            }
        }
        else ans += s[i];
    }
    cout << ans;
    return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...