UVa 561 Jackpot

📅 2026/6/23 0:21:44
UVa 561 Jackpot
题目描述题目要求计算老虎机的中奖率期望收益。老虎机有三个滚轮每个滚轮上有若干符号用大写字母表示。中奖规则如下中间一行若三个滚轮显示的符号相同奖励101010个硬币。上方一行和下方一行若三个滚轮显示的符号相同奖励555个硬币。对角线左上到右下、左下到右上若三个滚轮显示的符号相同奖励777个硬币。所有中奖条件独立计算即同一个符号可以同时满足多个条件。期望收益为所有可能组合的平均奖励。输入格式第一行一个整数sss表示老虎机的数量。每个老虎机的输入包含第一行三个整数xxx、yyy、zzz3≤x,y,z≤2003 \le x, y, z \le 2003≤x,y,z≤200分别表示三个滚轮的符号数。三行字符串分别表示三个滚轮上的符号按顺序排列。输出格式对于每个老虎机输出一行期望收益保留四位小数。样例输入2 3 4 6 AAB BABA BBAAAB 12 15 18 CCCCCCCCCCCC CCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCC输出8.5000 34.0000题目分析本题的核心是计算每个符号在三个滚轮上出现的概率然后乘以对应的奖励。概率计算每个滚轮独立旋转每个符号出现的概率等于该符号在该滚轮上的出现次数除以滚轮总符号数。对于给定的符号三个滚轮同时显示该符号的概率为p1×p2×p3p_1 \times p_2 \times p_3p1​×p2​×p3​。中奖线共有555条每条线奖励不同。实际上每条线中奖时奖励固定与符号无关。因此总期望收益为期望∑symbol概率×(中间行10上下行5对角线7) \text{期望} \sum_{symbol} \text{概率} \times (\text{中间行}10 \text{上下行}5 \text{对角线}7)期望symbol∑​概率×(中间行10上下行5对角线7)但上下行各有111条对角线有222条所以每条线的奖励累加为105×27×23410 5 \times 2 7 \times 2 34105×27×234。因此期望收益 ∑i126(count1[i]x×count2[i]y×count3[i]z)×34\sum_{i1}^{26} \left( \frac{count_1[i]}{x} \times \frac{count_2[i]}{y} \times \frac{count_3[i]}{z} \right) \times 34∑i126​(xcount1​[i]​×ycount2​[i]​×zcount3​[i]​)×34。实际上每行和对角线出现相同字母的概率是一样的也就是说假设一行中奖的概率为xxx对角线中奖的概率为yyy则有xyxyxy。则期望收益等于x×10x×5x×5y×7y×7x×34 x \times 10 x \times 5 x \times 5 y \times 7 y \times 7 x \times 34x×10x×5x×5y×7y×7x×34在计算时获取每种字母的中奖概率xxx乘以期望收益最后求和即可。复杂度分析每个老虎机O(26)O(26)O(26)可接受。代码实现// Jackpot// UVa ID: 561// Verdict: Accepted// Submission Date: 2017-05-12// UVa Run Time: 0.000s//// 版权所有C2017邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;intmain(){cin.tie(0),cout.tie(0),ios::sync_with_stdio(false);intcases0,x,y,z;string wheel1,wheel2,wheel3;cincases;for(intc1;ccases;c){cinxyz;cinwheel1wheel2wheel3;intcount1[26]{0},count2[26]{0},count3[26]{0};for(inti0;ix;i)count1[wheel1[i]-A];for(inti0;iy;i)count2[wheel2[i]-A];for(inti0;iz;i)count3[wheel3[i]-A];doubleaverage0.0;for(inti0;i26;i){doublerate1.0;rate*(double)(count1[i])/(double)(x);rate*(double)(count2[i])/(double)(y);rate*(double)(count3[i])/(double)(z);averagerate*34.0;}coutfixedsetprecision(4)average\n;}return0;}