#include #include #include using namespace std; struct Position { long x,y; }; char changeDir(char d) { switch(d) { case 'N': return 'E'; case 'E': return 'S'; case 'S': return 'W'; case 'W': return 'N'; } return ' '; } Position move(char d,Position p) { Position newp; switch(d) { case 'N': newp.x = p.x; newp.y = p.y+1; break; case 'E': newp.x = p.x+1; newp.y = p.y; break; case 'S': newp.x = p.x; newp.y = p.y-1; break; case 'W': newp.x = p.x-1; newp.y = p.y; break; } return newp; } bool contain(std::vector &list) { for (unsigned long i = 0; i < list.size(); i++) { for (unsigned long j = 0; j < list.size(); j++) { if(i == j) continue; else { Position tmp1 = list[i]; Position tmp2 = list[j]; if(tmp1.x == tmp2.x && tmp1.y == tmp2.y) return true; } } } return false; } int main() { long numberOfInstruction = 0; do { if(scanf("%li",&numberOfInstruction) != 1) break; long *field = new long[numberOfInstruction]; for (long i = 0; i < numberOfInstruction; i++) { scanf("%li",&field[i]); } std::vector list; char dir = 'N'; Position p; p.x = 0; p.y = 0; list.push_back(p); for (long i = 0; i < numberOfInstruction; i++) { long moves = field[i]; for (long j = 0; j < moves; j++) { Position pos = move(dir, p); list.push_back(pos); p = pos; } if(contain(list)) { printf("%li\n",i); break; } else { if(i == numberOfInstruction-1) { printf("OK\n"); } } dir = changeDir(dir); } }while(true); return 0; }