Day 4 submission
This commit is contained in:
parent
61b6c4ca9f
commit
5689b82731
|
@ -0,0 +1,91 @@
|
||||||
|
#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;
|
||||||
|
}
|
|
@ -0,0 +1,100 @@
|
||||||
|
#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]))
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
}
|
Loading…
Reference in New Issue