Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #define Nmax 1048577
- using namespace std;
- struct Coada
- {
- int q[Nmax],pr,ul;void Init(){pr = 0;ul = - 1;}int Empty(){if(pr <= ul) return 0;return 1;}void Push(int x){ul++;q[ul] = x;}void Pop(){if(!Empty()) pr++;}int Front(){return q[pr];}int Size(){return ul - pr + 1;}
- };\
- int n, nrFinal, v[Nmax];
- void Operatie(int &x, int k)
- {
- int i, p, z;
- for(p = k; p <= n; p = p + k)
- {
- z = (1 << (p-1)); /// x = 2 la puterea p-1
- x = x ^ z;
- }
- }
- int main()
- {
- int i, doila_i, x, y;
- Coada c, op;
- c.Init(); op.Init();
- ifstream fin("sir.in");
- fin >> n;
- nrFinal = 0;
- doila_i = 1;
- for(i = 0; i < n; i++)
- {
- fin >> x;
- if(x == 1)
- nrFinal += doila_i;
- doila_i *= 2;
- }
- fin.close();
- ///--Initializarea cozii--
- c.Init();
- c.Push(0);
- v[0] = 1;
- op.Push(0);
- int gata = 0;
- while(!c.Empty() && !gata)
- {
- x = c.Front();
- c.Pop();
- for(i = 1; i <= n; i++)
- {
- y = x;
- Operatie(y, i);
- if(v[y] == 0)
- {
- c.Push(y);
- op.Push(i);
- v[y] == 1;
- }
- if(y == nrFinal) gata = 1;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement