Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <cstring>
- #define DMAX 102
- using namespace std;
- ifstream fin("virus.in");
- ofstream fout("virus.out");
- char ceroare[]= {1,3,7,15,31,63,127,0};
- int n, m, cerinta, nr;
- char a[DMAX][DMAX];
- int biti[DMAX][DMAX];
- void citire();
- int transforma();
- bool gata();
- int numara(char x);
- char schimba (char x);
- char schimbamaxim (char x);
- int main()
- {
- citire();
- if (cerinta==1)
- fout<<transforma()<<'\n';
- else
- {
- while (!gata())
- {
- transforma();
- nr++;
- }
- fout<<nr<<'\n';
- }
- return 0;
- }
- void citire()
- {
- int i, j;
- fin>>n>>m;
- fin.get();
- for (i=1; i<=n; i++)
- {
- for (j=1; j<=m; j++)
- {
- fin.get(a[i][j]);
- if (strchr(ceroare,a[i][j]))
- a[i][j]=0;
- }
- fin.get();
- }
- fin>>cerinta;
- }
- bool gata()
- {
- int i, j;
- for (i=1; i<=n; i++)
- for (j=1; j<=m; j++)
- if (a[i][j])
- return 0;
- return 1;
- }
- int transforma()
- //returneaza numarul de caractere inatacabile obtinute
- {
- int i, j, maxim=-1, rez=0;
- for (i=1; i<=n; i++)
- for (j=1; j<=m; j++)
- {
- biti[i][j]=numara(a[i][j]);
- if (biti[i][j]>maxim)
- maxim=biti[i][j];
- }
- for (i=1; i<=n; i++)
- for (j=1; j<=m; j++)
- if (biti[i][j])
- {
- if (biti[i][j]==maxim)
- a[i][j]=schimbamaxim(a[i][j]);
- else
- a[i][j]=schimba(a[i][j]);
- if (strchr(ceroare,a[i][j]))
- a[i][j]=0;
- if (a[i][j]==0)
- rez++;
- }
- return rez;
- }
- int numara(char x)
- {
- int i, rez=0;
- for (i=0; i<8; i++)
- {
- rez+=x%2;
- x/=2;
- }
- return rez;
- }
- char schimba (char x)
- {
- int v[8], i, rez=0;
- for (i=0; i<8; i++)
- {
- v[i]=x%2;
- x/=2;
- }
- for (i=0; v[i]; i++);
- v[i]=1;
- for (i=7; i>=0; i--)
- rez=rez*2+v[i];
- return rez;
- }
- char schimbamaxim (char x)
- {
- int v[8], i, rez=0, cati;
- for (i=0; i<8; i++)
- {
- v[i]=x%2;
- x/=2;
- }
- for (i=7, cati=0; i>=0 && cati<2; i--)
- if (v[i])
- {
- v[i]=0;
- cati++;
- }
- for (i=7; i>=0; i--)
- rez=rez*2+v[i];
- return rez;
- }
Add Comment
Please, Sign In to add comment