Revizia anterioară Revizia următoare
| Fișierul intrare/ieșire | virus.in, virus.out | Sursă | ONI 2019 baraj gimnaziu |
|---|---|---|---|
| Autor | Marinel Șerban | Adăugată de |
|
| Timp de execuție pe test | 0.1 sec | Limită de memorie | 8192 KB |
| Scorul tău | N/A | Dificultate |
Vezi soluțiile trimise | Statistici
Virus (baraj gimnaziu)
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 n linii pe fiecare aflându-se câte m caractere. Caracterele sunt reținute în memoria calculatorului prin codul lor ASCII, reprezentat în binar pe 8 biți. Biții sunt numerotați de la 0 la 7 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:
1. virusul afectează doar caracterele ale căror coduri nu are toți biții egali cu 0; caracterul al cărui cod are toți biții egali cu 0 se numește inatacabil;
2. se determină caracterele ale căror coduri au număr maxim de biți egali cu 1; pentru fiecare astfel de caracter cei mai semnificativi 2 biți egali cu 1 din cod se transformă în 0, iar dacă nu are în cod 2 biți egali cu 1, se va transforma în 0 singurul bit 1 existent;
3. pentru toate celelalte caractere atacabile, bitul cel mai puțin semnificativ egal cu 0 al codului se transformă în 1;
4. 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 1, 3, 7, 15, 31, 63, 127 și virusul le transformă imediat în 0 (adică devin inatacabile), indiferent când un astfel de caracter apare (adică dacă el există inițial pe ecran sau apare după o transformare).h2. Date de intrare
Cerință
Cunoscând configurația inițială a ecranului, scrieți un program care să rezolve următoarele două cerințe:
1. determină numărul de caractere inatacabile obținute în prima secundă (adică după prima transformare);
2. 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 n m, reprezentând dimensiunile ecranului. Pe fiecare dintre următoarele n linii se află câte m 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ă (1 sau 2).
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
- 1 ≤ n, m ≤ 100
- Caracterele aflate inițial pe ecran au coduri cuprinse între 32 și 127.
- Pentru teste valorând 30 de puncte, cerința este 1.
Exemplu
| virus.in | virus.out |
|---|---|
| This is some text written on multiple lines. |
This is another text written on multiple lines. |
Explicație
...



Poți vedea testele pentru această problemă accesând