Problema palc, Campion 2009
1Un sir de caractere se numeste palindrom daca se citeste la fel de le stanga la dreapta si de la dreapta la stanga, de exemplu „capac”, „12321”.
Åžirul se va numi palindrom ciclic daca se transforma in palindrom prin o serie de permutari ciclice a elementelor sale. O permutare ciclica a elementelor sirului de caractere este deplasarea lor cu o pozitie spre stanga (in acest caz primul element trece in ultima pozitie) sau spre dreapta (ultimul element trece in prima pozitie) De exemplu, AABB se transforma in ABBA prin o singura permutare ciclica la stanga; 345432112 – prin doua permutari ciclice la dreapta (23453211; 123454321) sau prin sapte permutari (454321123; 543211234; 432112345; 321123454; 211234543; 112345432; 123454321).
Cerinta
Scrieti un program, care sa determine daca un sir dat de caractere este un palindrom ciclic sau nu, precum si numarul minim de permutari ciclice ale sirului de caractere, care il transforma in palindrom.
Date de intrare
Fisierul de intrare palc.in va contine o singura linie pe care va fi scris sirul de caractere S.
Date de iesire
Fisierul text palc.out va contine o singura linie pe care va fi scris un singur numar intreg: -1, daca sirul de caractere S nu poate fi transformat in palindrom prin permutari ciclice, respectiv numarul minim de permutari ciclice care transforma sirul de caractere S in palindrom.
Restrictii
- Lungimea sirului de caractere S < = 200
- Åžirul de caractere S poate contine numai litere, cifre si spatii.
Exemple
palc.in | palc.out | palc.in | palc.out | palc.in | palc.out |
2341 |
-1 | aab |
1 | 345432112 |
2 |
Solutie Oficiala
Se vor realiza cel mult k/2 permutari ciclice spre stanga si spre dreapta. La fiecare permutare se verifica daca cel putin unul dintre sirurile obtinute este palindrom. Daca in nici una din directii nu s-a obtinut palindromul prin k/2 permutari rezultatul este -1. Altfel se inscrie indicele transformarii care genereaza palindromul.
Solutia mea(mai interesanta si mai detaliata)
Solutia de mai sus mi s-a parut putin cam neinteresanta din punctul de vedere al lucrurilor noi invatate.Metoda pe care am abordat-o eu a fost dublarea sirului de caractere si incepand de la i=0 pana la n(lungimea sirului initial) am verificat daca avem un palindrom.Solutia este MIN(i,n-i).
Descarcati solutia la problema palc,Campion 2009 – runda 4
Daca acest articol contine o greseala, selecteaza cuvintele sau fraza gresita si tasteaza combinatia de taste Shift + Enter sau apasa click aici pentru a o raporta. Multumim!
Problemele au fost bune, eu sunt multumita de punctajul meu. Pacat ca unele teste au fost dumb, unele exemple creep … Una peste alta, mi-a placut. 🙂