1304B - Longest Palindrome - CodeForces Solution


brute force constructive algorithms greedy implementation strings *1100

Please click on ads to support us..

C++ Code:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
    int n, m;
    cin >> n >> m;
    map<string, int> k;
    set<string> a;
    vector<string> g;
    string s;
    while (n--)
    {
        cin >> s;
        k[s]++;
        a.insert(s);
        g.push_back(s);
    }
    ll mx = 0;
    string j, r;

    for (auto x : k)
    {
        r = x.first;
        reverse(r.begin(), r.end());
        if (x.second > mx && r == x.first)
        {
            mx = x.second;
            j = x.first;
        }
    }
    deque<string> dq;
    while (mx--)
    {
        dq.push_back(j);
    }
    if (dq.size())
    {
        a.erase(j);
        k[j] = 0;
    }

    for (auto x : g)
    {
        if (k[x] != 0)
        {
            r = x;
            reverse(r.begin(), r.end());
            if (a.find(r) != a.end())
            {
                if ((x == r && k[x] % 2 == 0))
                {
                    dq.push_back(x);
                    dq.push_front(r);
                }
                else if (x != r)
                {
                    dq.push_back(x);
                    dq.push_front(r);
                }
                k[x]--;
                k[r]--;
            }
            if (k[x] == 0 || k[r] == 0)
            {
                a.erase(x);
                a.erase(r);
            }
        }
    }
    ll si = 0;
    for (auto x : dq)
    {
        si += x.size();
    }
    cout << si << endl;
    for (auto x : dq)
    {
        cout << x;
    }
}


Comments

Submit
0 Comments
More Questions

1602A - Two Subsequences
1555A - PizzaForces
1607B - Odd Grasshopper
1084A - The Fair Nut and Elevator
1440B - Sum of Medians
1032A - Kitchen Utensils
1501B - Napoleon Cake
1584B - Coloring Rectangles
1562B - Scenes From a Memory
1521A - Nastia and Nearly Good Numbers
208. Implement Trie
1605B - Reverse Sort
1607C - Minimum Extraction
1604B - XOR Specia-LIS-t
1606B - Update Files
1598B - Groups
1602B - Divine Array
1594B - Special Numbers
1614A - Divan and a Store
2085. Count Common Words With One Occurrence
2089. Find Target Indices After Sorting Array
2090. K Radius Subarray Averages
2091. Removing Minimum and Maximum From Array
6. Zigzag Conversion
1612B - Special Permutation
1481. Least Number of Unique Integers after K Removals
1035. Uncrossed Lines
328. Odd Even Linked List
1219. Path with Maximum Gold
1268. Search Suggestions System