AHSOFNU NOIP模拟题-11 T3(模拟+期望)

很有意思的题目。
按题意模拟就行了,但是发现结果只有$13^4$种,那可以预处理所有情况,或者打表,或者记录已经算过的结果都行,这里的代码只能过$70\%$应该是处理的时候有些暴力了

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
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ms(i, j) memset(i, j, sizeof i)
#define ll long long
#define FN2 "count"
using namespace std;
ll b, n, k;
ll poww(ll a, ll b) {
ll ret = 1, s = a;
while (b) {
if (b&1) ret = (ret * s) % k;
s = (s * s) % k;
b >>= 1;
}
return ret;
}
void clean() {}
void solve() {
clean();
printf("%I64d\n", poww(b, n));
}
int main() {
freopen(FN2".in", "r", stdin); freopen(FN2".out", "w", stdout);
scanf("%I64d%I64d%I64d", &b, &n, &k), solve();
fclose(stdin); fclose(stdout);
return 0;
}

斗牛
(niuniu.pas/.c/.cpp)
时间限制:2s,空间限制:128MB
题目描述:
为了更快的获取欢乐豆(因为本蒟蒻斗地主水平太低233),hzwer准备去玩欢乐斗牛,但是由于rp太差,hzwer在一个小时之内输光了20个QQ号的欢乐豆(每天系统会赠送每个号4000欢乐豆)。第二天他准备继续再战欢乐斗牛的抢庄模式,但是由于缺乏思考能力,hzwer需要编写一个程序来决定是否抢庄。
在玩家决定是否抢庄之前,系统会下发四张牌称为底牌,最后一张牌在决定后发放,每张牌可能为1-10,J,Q,K,hzwer认为最后一张牌为每一种点数的概率是相同的,对于一个由五张牌组成的牌型,分数计算规则如下,请你得出底牌的期望得分。
首先注意:在斗牛中,J,Q,K的点数视为10点,即11,12,13在计算头或点数时均视为10,所有牌无视其花色。
首先考虑特殊牌型

  1. 四炸——即5张牌中有4张一样的牌(如33334),分数为40
    2.五花牛——五张牌均是J,Q或K(如JQJQK),分数为50
    3.五小牛——五张牌点数都小于5且点数和小于或等于10(如11223),分数为60
    若有多种特殊牌型,得分取分数最大的特殊牌型(如11112视为五小牛)。
    如果没有特殊牌型,首先判断牌型是否有“头”,如果五张牌中任意三张的总和为10的倍数如(1K9)即为有“头”,无“头”的牌型得分为0。
    对于有头的牌型得分计算如下:
    所有牌的和记为t,如果t%10=0则称为“牛牛”,牛牛得分为30;t%10<7称为“小牛”,得分为t%10,否则得分为(t%10)* 2。
    输入描述:
    第一行一个整数T,表示T组数据
    每组数据占一行,为4个整数(11,12,13分别表示J,Q,K)
    输出描述:
    对于输入的n行,输出每4张牌的期望得分(四舍五入)
    样例输入:
    2
    2 2 2 2
    10 4 5 12
    样例输出:
    43
    9
    样例解释:
    对于2 2 2 2,最后一张为1或2时,构成五小牛,否则为炸弹,期望得分为(2*60+11*40)/13=43.08
    对于10 4 5 12,最后一张为1-13的得分分别是30+0+0+0+4+5+0+0+0+18+18+18+18=111/13=8.54
    1为牛牛,5为4点,6为5点,10-13为9点,其余无头
    数据范围:
    30%的数据T<=5
    70%的数据T<=100000
    100%的数据T<=1000000
    蒟蒻感言:
    在某次对局中发现期望得分很高,果断抢了庄,但是发现有闲家3个“牛牛”,瞬间消失20W欢乐豆
------ 本文结束 ------