---
# System prepended metadata

title: pE
tags: [社末賽]

---

## pE. 馬拉車 - Blame
標籤 : **回文、條件判斷**

- **題目**
    [TOJ 780](https://toj.tfcis.org/oj/contests/13/pro/780/)
    
- **題解**
    :::success
    **經典的回文問題**
    **最長又最先子回文字串聽起來很難找**
    **但其實最長就只是從長範圍搜到短範圍**
    **最先就是從最左邊搜到最右邊**
    **再吃一點實作技巧**
    :::
    :::warning
    **順便說一下，-1其實是假題敘**
    **因為單個字元也屬於回文，所以根本沒有-1的情況**
    :::
    
- **程式碼**
    
    :::danger
    **因為是OI賽制，所以會有子任務分數**
    **出題者希望大家就算想不出來正解也能養成喇分數的習慣**
    **子任務應該都出的很佛 (?**
    **但個別子任務拿法都很諧咖就是了XD**
    :::
    
    :::spoiler **子任務一 (1/100)**
    ```cpp=
    #include <iostream>
    using namespace std;
    int main() {
        char c; cin >> c;
        if(c == 'b') cout << "10\nblameemalb\n";
        else cout << "2\nee\n";
        // "\n" 為換行字元 = endl
    }
    ```
    :::
    
    :::spoiler **子任務二 (32/100)**
    **數字這麼小!**
    **暴力!**
    ```cpp=
    #include <iostream>
    using namespace std;
    int main() {
        string s; cin >> s;
        if(s[2] == s[0]) cout << "3\n" << s << '\n';
        else if(s[0] == s[1]) cout << "2\n" << s[0] << s[1] << '\n';
        else if(s[1] == s[2]) cout << "2\n" << s[1] << s[2] << '\n';
        else cout << "1\n" << s[0] << '\n';
    }
    ```
    **不出意外的話會順便過了子任務三**
    **再加上特判範測，拿到46分了，爽ㄟ!**
    
    **我也不知道為什麼我戳出去字串長度不會RE 哈哈**
    :::
    
    :::spoiler **子任務三 (13/100)**
    **因為 $S_i \neq S_j$ 代表著此字串字元不重複**
    **不重複代表著根本不可能存在長度 $\ge 2$ 的回文子字串**
    **所以答案就是第一個字元**
    ```cpp=
    #include <iostream>
    using namespace std;
    int main() {
        char c; cin >> c;
        cout << "1\n" << c << '\n';
    }
    ```
    :::
    
    :::spoiler **子任務四 (100/100)**
    ```cpp=
    #include <iostream>
    using namespace std;
    int main() {
        string s; cin >> s;
        for(int i = s.size(); i >= 1; i--) {
            for(int l = 0; l < s.size(); l++) {
                bool ok = true;
                for(int j = 0; j < i/2; j++) ok = ok && s[l+j] == s[l+i-1-j];
                if(ok) {
                    cout << i << '\n'; cout << s.substr(l, i) << '\n';
                    return 0;
                }
            }
        }
    }
    ```
    :::