| Task: | Palindromi |
| Sender: | henri0 |
| Submission time: | 2025-10-30 06:10:02 +0200 |
| Language: | C++ (C++17) |
| Status: | READY |
| Result: | 100 |
| group | verdict | score |
|---|---|---|
| #1 | ACCEPTED | 100 |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.00 s | details |
| #2 | ACCEPTED | 0.00 s | details |
| #3 | ACCEPTED | 0.00 s | details |
| #4 | ACCEPTED | 0.00 s | details |
| #5 | ACCEPTED | 0.00 s | details |
| #6 | ACCEPTED | 0.00 s | details |
| #7 | ACCEPTED | 0.00 s | details |
| #8 | ACCEPTED | 0.00 s | details |
| #9 | ACCEPTED | 0.00 s | details |
| #10 | ACCEPTED | 0.00 s | details |
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 |
