#include #include using namespace std; int elovizsgal(vector &v, unsigned int N) { if (v[0] == 0 && v[1] !=1) return 1; if (v[0] == 1) return 1; if (v[0] == 0 && v[4] == 5*N -1) return 1; if (N % 3 == 1) { unsigned int fix1 = (N/3) * 10 + 2; unsigned int fix2 = (N/3) * 10 + 3; if (!(2*N <= fix1 && fix1 < 4*N)) return 0; bool f1 = false; bool f2 = false; for (unsigned int i=0; i < 5 ;i++) { if (fix1 == v[i]) f1 = true; if (fix2 == v[i]) f2 = true; } if (f1 && !f2) return 1; if (!f1 && f2) return 1; if (f1 && (v[0] == 0 || v[4] == 5*N -1)) return 1; } return 0; } int vizsgal(vector &v, unsigned long long game, unsigned int N) { bool jolesz = true; for (unsigned int i=(v[0]/5)*5; i < (v[0]/5)*5+5 ;i+= 1) { bool vanolyan = false; for (unsigned int j=0;j < 5 ;j+= 1) { if (v[j] == i) { vanolyan = true; break; } } if (vanolyan == false) jolesz = false; } if (jolesz) { cout << "Player " << v[0]/5 + 1 << " wins the game number " << game - 1 << ".\n"; return 1; } return 0; } int osztas(unsigned int N, unsigned int k) { if (k >= 0 && k <= 2*N-1) { k = 5*(k/2) + k % 2 ; return k;} if (k >= 2*N && k <= 4*N-1) { k = 5* ((k-2*N)/2)+ k % 2 +2; return k;} if (k >= 4*N && k <= 5*N-1) k = (k- (4 * N))*5 + 4; return k; } bool checkstate(vector &states, vector &v) { bool egyezik = true; for (unsigned int i=0;i> N; if (N == 0) return 0; vector v; vector temp(5,0); vector states; current = 0; vector ures(5,0); for (unsigned int i=0;i<5*N;i++) { f >> in; if (in > 0 && in < 6) v.push_back(i); } states = v; if (elovizsgal(v,N)) { cout << "Neverending game." << endl; } else { while (true) { current++; temp = ures; if (vizsgal(v,current,N)) break; for (unsigned int j=0; j < v.size();j++) { temp[j] = osztas(N,v[j]); } v = temp; if (checkstate(states,v)) break; } } } return 0; } int main() { app(cin); return 0; }