#include #include #include using namespace std; struct board { int nums[25]; friend istream &operator>>( istream &input, board &b ) { for(int i = 0; i < 25; i++) input >> b.nums[i]; return input; } bool marked[25]; }; bool is_winning(board b); int board_score(board b, int last_drawn); int main() { int drawing[100]; vector boards; board next_board; for(int i = 0; i < 100; i++) cin >> drawing[i]; while (cin >> next_board) { memset(next_board.marked, false, 25); boards.push_back(next_board); } for(int i = 0; i < 100; i++) { for(int j = 0; j < boards.size(); j++) { for(int k = 0; k < 25; k++) { if (drawing[i] == boards[j].nums[k]) { boards[j].marked[k] = true; if (is_winning(boards[j])) { if (1 == boards.size()) { cout << board_score(boards[j], drawing[i]) << endl; return 0; } else { boards.erase(boards.begin() + j); j--; break; } } } } } } return 0; } bool is_winning(board b) { for(int i = 0; i < 5; i++) { if (b.marked[5*i] && b.marked[5*i+1] && b.marked[5*i+2] && b.marked[5*i+3] && b.marked[5*i+4]) { return true; } } for(int i = 0; i < 5; i++) { if (b.marked[i] && b.marked[i+5] && b.marked[i+10] && b.marked[i+15] && b.marked[i+20]) { return true; } } return false; } int board_score(board b, int last_drawn) { int sum = 0; for(int i = 0; i < 25; i++) { if (!b.marked[i]) { sum += b.nums[i]; } } return last_drawn*sum; }