div2 620 B

B

Tag

字符串,贪心,思维,set,暴力


回文串的最终形式一定是

(S_1+S_2+S_3+...+S_{mid}+...+S_{n-2}+S_{n-1}+S_n)

我们只需要统计出有多少对 回文串,然后把他们分别放到两边,最后在把自己跟自己回文的串放到中间

#include <bits/stdc++.h>
using namespace std;
const int N = 110;
string s[N];
set<string> dict;
int main() {
    int n,m;
    cin >> n >> m;
    for(int i = 0;i < n; ++i) {
        cin >> s[i];
        dict.insert(s[i]);
    }
    vector<string> left,right;
    string mid ;
    for(int i = 0;i < n; ++i) {
        string t = s[i];
        reverse(t.begin(),t.end());
        if(t == s[i]) {
            mid = t;
        }
        else if(dict.find(t) != dict.end()) {
            left.push_back(s[i]);
            right.push_back(t);
            dict.erase(s[i]);
            dict.erase(t);
        }
    }
    cout << left.size() * m * 2 + mid.size() << endl;
    for(auto x : left) cout << x;
    cout << mid;
    reverse(right.begin(),right.end());
    for(auto x : right) cout << x;
    cout << endl;
    return 0;
}
原文地址:https://www.cnblogs.com/lukelmouse/p/12345227.html