## 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; } } } } ``` :::
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up