Cod sursa(job #2940882)

Utilizator LucaMuresanMuresan Luca Valentin LucaMuresan Data 16 noiembrie 2022 18:26:16
Problema A+B Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in ("palind.in");
ofstream out ("palind.out");

void solve()
{
    string s;
    in >> s;

    int f[26] = {};
    for (char ch : s)
    {
        f[ch - 'a']++;
    }

    int odd = 0;
    for (int i=0; i<26; i++)
        odd += (f[i] & 1);

    int n = s.size();

    if (odd > n % 2)
    {
        out << -1;
        return;
    }

    int l=0, r=n-1;
    int ans = 0;

    while (l < r)
    {
        if (f[s[l]-'a'] > 1)
        {
            int pos = r;
            while (pos >= l)
            {
                if (s[pos] == s[l])
                {
                    for (int i=pos; i<r; i++)
                        swap(s[i], s[i+1]), ans++;
                    break;
                }
                pos--;
            }
        }
        else
        {
            int pos = l;
            while (pos <= r)
            {
                if (s[pos] == s[r])
                {
                    for (int i=l; i<pos; i++)
                        swap(s[i], s[i+1]), ans++;
                    break;
                }
                pos++;
            }
        }

        l++, r--;

    }

    out << ans;
}

int main()
{
    int t;
    in >> t;

    while (t--)
        solve(), out << '\n';

    return 0;
}