Ranking (as of 2015-05-15): 27 out of 61
Language: C++
/*
UVa 11975 - Tele-loto
To build using Visual Studio 2012:
cl -EHsc -O2 UVa_11975_Tele-loto.cpp
*/
#include <cstdio>
const int nr_balls_max = 75, nr_values = 4, nr_rows = 5, nr_columns = 5;
int balls[nr_balls_max], values[nr_values], ticket[nr_rows][nr_columns],
findings[nr_rows][nr_columns];
bool corners(int n)
{
return n >= 4 && findings[0][0] < 35 && findings[0][nr_columns - 1] < 35 &&
findings[nr_rows - 1][0] < 35 && findings[nr_rows - 1][nr_columns - 1] < 35;
}
bool mid_line(int n)
{
if (n < nr_columns)
return false;
for (int i = 0; i < nr_columns; i++)
if (findings[2][i] >= 40)
return false;
return true;
}
bool diagonals(int n)
{
return n >= 9 && findings[0][0] < 45 && findings[0][nr_columns - 1] < 45 &&
findings[1][1] < 45 && findings[1][3] < 45 && findings[2][2] < 45 &&
findings[3][1] < 45 && findings[3][3] < 45 &&
findings[nr_rows - 1][0] < 45 && findings[nr_rows - 1][nr_columns - 1] < 45;
}
bool table(int n)
{
if (n < nr_rows * nr_columns)
return false;
for (int i = 0; i < nr_rows; i++)
for (int j = 0; j < nr_columns; j++)
if (findings[i][j] == nr_balls_max)
return false;
return true;
}
int main()
{
int T;
scanf("%d", &T);
for (int t = 1; t <= T; t++) {
int N, L;
scanf("%d %d", &N, &L);
for (int i = 0; i < N; i++)
scanf("%d", &balls[i]);
for (int i = 0; i < nr_values; i++)
scanf("%d", &values[i]);
printf("Case %d:\n", t);
while (L--) {
for (int i = 0; i < nr_rows; i++)
for (int j = 0; j < nr_columns; j++) {
scanf("%d", &ticket[i][j]);
findings[i][j] = nr_balls_max;
}
for (int i = 0; i < N; i++) {
int c = (balls[i] - 1) / 15;
for (int r = 0; r < nr_rows; r++)
if (ticket[r][c] == balls[i]) {
findings[r][c] = i; break;
}
}
int value = 0;
if (corners(N))
value += values[0];
if (mid_line(N))
value += values[1];
if (diagonals(N))
value += values[2];
if (table(N))
value += values[3];
printf("%d\n", value);
}
if (t < T)
putchar('\n');
}
return 0;
}
No comments:
Post a Comment