/** First, LAST Name: Andrei ALEXANDRESCU Contest #3, Senior 3 Division School Name: National College Andrei Saguna Brasov Romania Input file: grid.in Output: file - grid.out */ #include #include using namespace std; int pat[6][6][6]; int T[100][100]; int add(int unde, int P) { int x, y, i, j; unde--; x = 7 - (unde / 5); y = unde % 5 + 1; if(P > 3 && x == 1) return 0; if(P == 2 && x == 1) return 0; for(i = 0; i < 2; i++) for(j = 0; j < 2; j++) { if(T[x - i][y + j] && pat[P][i][j]) return 0; } for(i = 0; i < 2; i++) for(j = 0; j < 2; j++) T[x - i][y + j] = max(T[x - i][y + j], pat[P][i][j]); return 1; } ofstream out ("grid.out"); int path(int unde, int P) { unde--; int x = 7 - (unde / 5); int y = unde % 5 + 1; int i; if(P <= 2) { for(i = 1; i <= x; i++) if(T[i][y]) return 0; } else { if(y == 5) return 0; for(i = 1; i < x; i++) if(T[i][y] || T[i][y + 1]) return 0; } return 1; } void matr() { int i, j; for(i = 1; i <= 7; i++) { for(j = 1; j <= 5; j++) out << T[i][j] << " "; out << "\n"; } } void solve(int P) { int i; for(i = 1; i <= 35; i++) { if(path(i, P)) if(add(i, P)) break; } if(i > 35) out << "NONE\n"; else out << i << "\n"; //matr(); } void read() { int N, x, P; ifstream in ("grid.in"); in >> N; while(N--) { in >> x; x--; T[7 - (x / 5)][x % 5 + 1] = 1; } N = 5; while(N--) { in >> P; solve(P); } } void init() { pat[1][0][0] = 1; pat[2][0][0] = 1; pat[2][1][0] = 1; pat[3][0][0] = 1; pat[3][0][1] = 1; pat[4][0][0] = 1; pat[4][1][0] = 1; pat[4][1][1] = 1; pat[5][0][0] = 1; pat[5][0][1] = 1; pat[5][1][0] = 1; } int main() { init(); read(); return 0; }