Există azi mulţi viruşi care acţionează în diferite moduri asupra informaţiei stocate într-un calculator. Printre aceştia există şi unii mai puţin periculoşi, care se mulţumesc doar să simuleze o anumită alterare a informaţiei. Să presupunem că dorim să scriem un astfel de virus care acţionează doar asupra informaţiei de tip text de pe ecranul calculatorului. În mod text, ecranul este constituit din linii pe fiecare aflându-se câte caractere. Caracterele sunt reţinute în memoria calculatorului prin codul lor ASCII, reprezentat în binar pe biţi. Biţii sunt numerotaţi de la la de la dreapta către stânga, cel din stânga fiind cel mai semnificativ bit.
La fiecare secundă, virusul transformă simultan toate caracterele de pe ecran după următoarele reguli:
- virusul afectează doar caracterele ale căror coduri nu are toți biții egali cu ; caracterul al cărui cod are toţi biţii egali cu se numește inatacabil;
- se determină caracterele ale căror coduri au număr maxim de biți egali cu ; pentru fiecare astfel de caracter cei mai semnificativi biţi egali cu din cod se transformă în , iar dacă nu are în cod biţi egali cu , se va transforma în singurul bit existent;
- pentru toate celelalte caractere atacabile, bitul cel mai puţin semnificativ egal cu al codului se transformă în ;
- unele caractere pot genera erori în execuţia virusului deoarece transformând succesiv codurile lor se pot obţine cicluri; aceste caractere au codurile ASCII , , , , , , şi virusul le transformă imediat în (adică devin inatacabile), indiferent când un astfel de caracter apare (adică dacă el există iniţial pe ecran sau apare după o transformare).
Cerinţă
Cunoscând configuraţia iniţială a ecranului, scrieţi un program care să rezolve următoarele două cerinţe:
- determină numărul de caractere inatacabile obţinute în prima secundă (adică după prima transformare);
- determină după câte secunde toate caracterele de pe ecran sunt inatacabile.
Date de intrare
Fișierul de intrare virus.in
conţine pe prima linie două numere naturale separate printr-un spațiu , , reprezentând dimensiunile ecranului. Pe fiecare dintre următoarele linii se află câte caractere, reprezentând caracterele existente iniţial pe ecran. Ultima linie a fișierului de intrare conține cerinţa care trebuie să fie rezolvată ( sau ).
Date de ieșire
Fișierul de ieșire virus.out
va conține o singură linie pe care va fi scris un număr natural, reprezentând răspunsul la cerinţa specificată în fişierul de intrare.
Restricții și precizări
- Caracterele aflate inițial pe ecran au coduri cuprinse între şi .
- Pentru teste valorând de puncte, cerința este .
Exemplul 1
virus.in
2 2
AA
AA
1
virus.out
4
Explicație
Caracterul are codul , deci numărul maxim de biți egali cu este (egal pentru toate caracterele); după o secundă toate cele caractere vor avea codul (deci devin inatacabile).
Exemplul 2
virus.in
3 3
AAC
AAC
CCC
2
virus.out
2
Explicație
În prima secundă:
- numărul maxim de biți egali cu în codurile caracterelor este ( având codul ); după eliminarea celor mai semnificativi doi biți codul lui devine , deci devine un caracter care generează erori şi virusul îl transformă imediat în (inatacabil);
- celelalte caractere (cu codul ) devin (codul ).
În a doua secundă numărul maxim de biți egali cu este , se elimină cei mai semnificativi doi biți , codul devine rezultă un caracter care generează erori, deci virusul îl transformă în inatacabil. Astfel, după două secunde toate caracterele sunt inatacabile.