Submission details
Task:Palindromi
Sender:henri0
Submission time:2025-10-30 06:10:02 +0200
Language:C++ (C++17)
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED100
Test results
testverdicttime
#1ACCEPTED0.00 sdetails
#2ACCEPTED0.00 sdetails
#3ACCEPTED0.00 sdetails
#4ACCEPTED0.00 sdetails
#5ACCEPTED0.00 sdetails
#6ACCEPTED0.00 sdetails
#7ACCEPTED0.00 sdetails
#8ACCEPTED0.00 sdetails
#9ACCEPTED0.00 sdetails
#10ACCEPTED0.00 sdetails

Code

#include <iostream>
#include <string>
#include <utility>
#include <chrono>
#include <thread>
#include <cmath>
#include <optional>

int CompareStrings(const std::string& str) {
    float f = 0.f;

    size_t len = (str.length() % 2 == 0) ? str.length() / 2 : str.length() / 2 + 1;

    size_t left = 0;
    size_t right = str.length() - 1;

    for (size_t i = 0; i < len; ++i) {
        //std::cout << str[left] << " " << str[right] << std::endl;
        if (str[left] == str[right]) {
            f += 100.f / len;
        }
        left++;
        right--;
    }

    return ceil(f);
}

int StepsToMakeAPalindrome(const std::string &str) {
    int steps = 0;

    
    //size_t right = str.length() - 1;

    std::string palindrome = str;

    while (CompareStrings(palindrome) < 100) {

        size_t left = 0;

        std::pair<size_t, float> lCan(0, 0.f);

        for (size_t i = 0; i < str.length() / 2; ++i) {
            //std::cout << str[left] << " " << str[right] << std::endl;

            std::string fs = palindrome;
            fs[left] = palindrome[palindrome.length()-1-left];
            float fl = CompareStrings(fs);
            if (fl > lCan.second) lCan = std::pair<size_t, float>(left, fl);

            left++;
        }

        //std::cout << lCan.first << " e " << lCan.second << std::endl;
        palindrome[lCan.first] = palindrome[palindrome.length()-1-lCan.first];

        //std::cout << palindrome << std::endl;

        steps++;
    }

    //std::cout << lCan.first << ", " << lCan.second << " : " << rCan.first << ", " << rCan.second << std::endl;


    return steps;
}



int main() {

    std::string str;
    std::cin >> str;
    //std::cout << CompareStrings(str) << std::endl;

    std::cout << StepsToMakeAPalindrome(str) << std::endl;

    return 0;
}

Test details

Test 1 (public)

Verdict: ACCEPTED

input
datatahti

correct output
3

user output
3

Test 2 (public)

Verdict: ACCEPTED

input
saippuakauppias

correct output
0

user output
0

Test 3 (public)

Verdict: ACCEPTED

input
a

correct output
0

user output
0

Test 4 (public)

Verdict: ACCEPTED

input
aa

correct output
0

user output
0

Test 5 (public)

Verdict: ACCEPTED

input
abc

correct output
1

user output
1

Test 6 (public)

Verdict: ACCEPTED

input
aybabtu

correct output
2

user output
2

Test 7 (public)

Verdict: ACCEPTED

input
abacabaca

correct output
2

user output
2

Test 8 (public)

Verdict: ACCEPTED

input
bbbbaaaababbbbbaabaaabaaaaabab...

correct output
23

user output
23

Test 9 (public)

Verdict: ACCEPTED

input
acbaaabaabaddaccdcccbcdbdddacd...

correct output
38

user output
38

Test 10 (public)

Verdict: ACCEPTED

input
uaqtmfftecryanvpshxsodjrllqnqp...

correct output
49

user output
49