[UVA] 11975 - Tele-loto
Y — Tele-loto
Time Limit: 1 sec
Memory Limit: 32 MB
Tele-loto is a lottery game that is held every weekend in Lithuania. Most of the population know this game and almost everyone have played it at least once. In this task you are asked to write an application which finds the winnings given N balls, the lottery tickets and amount of money for each combination. Possible combinations are listed below:
- Corners (must be filled within the first 35 balls)
- MidLine (must be filled within the first 40 balls)
- Diagonals (must be filled within the first 45 balls)
- Table (until one of the players wins the game)
Totally 75 balls are in the game each with a unique number from 1 to 75. The i-th column in the ticket contains unique numbers in the interval [(i − 1) * 15 + 1; i * 15], no other numbers may appear in the column. If the ticket wins more than one combination the total money won is equal to the sum of money won for each combination. Pay attention that combination MidLine is applied only to a single middle line!
INPUT
The first line contains the number of tests T
(T ≤ 100). Then T
tests follow. On the first line of each test there are 2 numbers: N
(0 ≤ N ≤ 75) — number of balls, L
(L ≤ 103) — number of tickets. On the second line there are N
different integers indicating the values of the drawn lucky balls
separated by a single space character. Next line contains 4 integers V
(Vi
≤ 1000) indicating the values of each combination in left-to-right
order as in the picture. Then 5 lines follow for each ticket with 25
different integers indicating the numbers on the ticket in the order as
in the picture. Each line contains exactly 5 integers separated by a
single space character.
OUTPUT
For each test case output the line "Case T:"
where T
is a test number starting from 1. Then L
lines follow each indicating the amount of money the ticket won in the
order they appear in the input. The test cases must be separated by a
blank line. Refer sample output for details.
SAMPLE INPUT
1 9 1 12 67 8 75 4 30 42 54 74 2 5 10 1000 12 20 36 57 67 2 28 45 59 63 4 30 42 54 74 5 26 34 49 70 8 16 37 48 75
SAMPLE OUTPUT
Case 1: 7
Problem by: Aleksej Viktorchik; Leonid Sislo
Huge Easy Contest #2
兌獎有限定在 35, 40, 45, 75 個球內,一開始以為 "until one of the players wins the game"
指的是直到一個勝利者出現,事實上是獨立的,看做前 75 個前即可。
#include <stdio.h>
#include <string.h>
int main() {
int testcase, cases = 0;
int n, m, B[5], g[1000][5][5];
int i, j, k, A[105];
scanf("%d", &testcase);
while(testcase--) {
scanf("%d %d", &n, &m);
int ball[105] = {};
for(i = 0; i < n; i++) {
scanf("%d", &A[i]);
}
scanf("%d %d %d %d", &B[0], &B[1], &B[2], &B[3]);
for(i = 0; i < m; i++) {
for(j = 0; j < 5; j++)
for(k = 0; k < 5; k++)
scanf("%d", &g[i][j][k]);
}
printf("Case %d:\n", ++cases);
int earn[1005] = {}, kind[1005][4] = {};
for(i = 0; i < n; i++) {
ball[A[i]] = 1;
for(j = 0; j < m; j++) {
if(kind[j][0] == 0 && i < 35) {
if(ball[g[j][0][0]] && ball[g[j][4][0]] && ball[g[j][0][4]] && ball[g[j][4][4]]) {
earn[j] += B[0];
kind[j][0] = 1;
}
}
if(kind[j][1] == 0 && i < 40) {
if(ball[g[j][2][0]] && ball[g[j][2][1]] && ball[g[j][2][2]] && ball[g[j][2][3]] && ball[g[j][2][4]]) {
earn[j] += B[1];
kind[j][1] = 1;
}
}
if(kind[j][2] == 0 && i < 45) {
int flag = 1;
for(k = 0; k < 5; k++) {
flag &= ball[g[j][k][k]];
flag &= ball[g[j][k][4-k]];
}
if(flag) {
earn[j] += B[2];
kind[j][2] = 1;
}
}
if(kind[j][3] == 0) {
int flag = 1, p, q;
for(p = 0; p < 5 && flag; p++)
for(q = 0; q < 5 && flag; q++)
flag &= ball[g[j][p][q]];
if(flag) {
earn[j] += B[3];
kind[j][3] = 1;
}
}
}
}
for(i = 0; i < m; i++)
printf("%d\n", earn[i]);
if(testcase) puts("");
}
return 0;
}