UVa 561 - Jackpot

contents

  1. 1. Problem
  2. 2. Sample Input
  3. 3. Sample Output
  4. 4. Problem

Problem

拉霸遊戲,給你每一個輪子上的情況,而你可以可以看到每個輪子的連續三個可視範圍。

可視範圍構成的 3 x 3 區塊,

  • 如果上面一排都是相同元素,則獎金累加 5 元
  • 如果下面一排都是相同元素,則獎金累加 5 元
  • 如果中間一排都是相同元素,則獎金累加 10 元
  • 如果左上到右下的對角線上都是相同元素,則獎金累加 7 元
  • 如果右上到左下的對角線上都是相同元素,則獎金累加 7 元

求轉動一次的期望獎金為何

Sample Input

1
2
3
4
5
6
7
8
9
2
3 4 6
AAB
BABA
BBAAAB
12 15 18
CCCCCCCCCCCC
CCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCC

Sample Output

1
2
8.5000
34.0000

Problem

直接窮舉每一種字符的機率於每一個位置即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <stdio.h>
#include <math.h>
#include <iostream>
using namespace std;
int main() {
int testcase;
int A, B, C;
char sa[1024], sb[1024], sc[1024];
scanf("%d", &testcase);
while (testcase--) {
scanf("%d %d %d", &A, &B, &C);
scanf("%s %s %s", sa, sb, sc);
int cntA[26] = {}, cntB[26] = {}, cntC[26] = {};
for (int i = 0; sa[i]; i++) {
cntA[sa[i] - 'A']++;
}
for (int i = 0; sb[i]; i++) {
cntB[sb[i] - 'A']++;
}
for (int i = 0; sc[i]; i++) {
cntC[sc[i] - 'A']++;
}
double ret = 0;
for (int i = 0; i < 26; i++) {
ret += cntA[i] * cntB[i] * cntC[i] * 7.0 / A/ B/ C * 2;
ret += cntA[i] * cntB[i] * cntC[i] * 10.0 / A/ B/ C;
ret += cntA[i] * cntB[i] * cntC[i] * 5.0 / A/ B/ C * 2;
}
printf("%.4lf\n", ret);
}
return 0;
}
/*
2
3 4 6
AAB
BABA
BBAAAB
12 15 18
CCCCCCCCCCCC
CCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCC
*/