92 lines
1.8 KiB
C++
92 lines
1.8 KiB
C++
|
#include <iostream>
|
||
|
#include <vector>
|
||
|
#include <cstring>
|
||
|
|
||
|
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<board> 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]))
|
||
|
{
|
||
|
cout << board_score(boards[j], drawing[i]) << endl;
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
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;
|
||
|
}
|