1.1 题目背景
勇者虽然武力值很高,但在经历了多次战斗后,发现怪物越来越难打
于是开始思考是不是自己平时锻炼没到位,于是苦练一个月后发现......自己连一个史莱姆都打不过了。
勇者的精灵路由器告诉勇者其实是他自己的武器不好,并把他指引到了锻造厂。
1.2题目描述
“欢迎啊,老朋友。”
一阵寒暄过后,厂长带他们参观了厂子四周,并给他们讲锻造的流程。
“我们这里的武器分成若干的等级,等级越高武器就越厉害,并且对每一等级的武器都有两种属性值 b 和 c,但是我们初始只能花 a 个金币来生产 1 把 0 级剑......”
“所以你们厂子怎么这么垃圾啊,不能一下子就造出来 999 级的武器吗?”勇者不耐烦的打断了厂长的话。
“别着急,还没开始讲锻造呢......那我们举例你手中有一把 x 级武器和一把 y 级武器 (y = max(x − 1, 0)),我们令锻造附加值 k = min(c x , b y ),则你有 (frac{c_x}{k}) 的概率将两把武器融合成一把 x + 1 级的武器。”
“......但是,锻造不是一帆风顺的,你同样有 (1 − frac{c_x}{k}) 的概率将两把武器融合成一把 max(x − 1, 0) 级的武器......”
勇者听完后暗暗思忖,他知道厂长一定又想借此机会坑骗他的零花钱,于是求助这个村最聪明的智者——你,来告诉他,想要强化出一把 n 级的武器,其期望花费为多少?
由于勇者不精通高精度小数,所以你只需要将答案对 998244353(7 ×17 × 2 23 + 1,一个质数 ) 取模即可。
1.3 格式
1.3.1 输入格式
第一行两个整数 n, a,含义如题所示。
为了避免输入量过大,第二行五个整数 bx, by, cx, cy, p,按照下列代码
来生成 b 和 c 数组。
b[0]=by+1;c[0]=cy+1;
for(int i=1;i<n;i++){
b[i]=((long long)b[i-1]*bx+by)%p+1;
c[i]=((long long)c[i-1]*cx+cy)%p+1;
}
1.3.2 输出格式
输出一行一个整数,表示期望花费。
1.4 样例
1.4.1 样例 1 输入
0 6432
4602677 3944535 2618884 6368297 9477531
1.4.2 样例 1 输出
6432
1.4.3 样例 2 输入
1 3639650
6136976 5520115 2835750 9072363 9302097
1.4.4 样例 2 输出
150643649
1.4.5 样例 3 输入
10 2
2 33 6 66 2333333
1.4.6 样例 3 输出
976750710
1.4.7 样例 4 输入
200 5708788
0 0 0 0 1
1.4.8 样例 4 输出
696441597
1.5数据范围
测试点 | n<= | 特殊性质 |
---|---|---|
1 | 0 | n/a |
2 | 1 | n/a |
3 | 200 | 有 |
4 | 200 | n/a |
5 | 2000 | 有 |
6 | 2000 | a/n |
7 | (10^6) | 有 |
8 | (10^6) | n/a |
9 | (10^7) | 有 |
10 | (10^7) | n/a |
对于特殊性质处标示为“有”的数据满足 p = 1。
对于 100% 的数据,0 ≤ a ≤ (10^7) , 0 ≤ bx, by, cx, cy < p < (10^7) , 0 ≤ n ≤(10^7)
啥?期望?不会下一题
(回来之后
p1好像可以瞎搞搞过去...
好像b和c数组全是1??
好像是fib??
40分到手
n0好像就是a??
又10分
数据范围好像有点大???
long long不够开??
啊少10分
(全场5-6人全开long long 的得到了0分的好成绩emm...
事后出题人:啥?256M还过不了??long long ?? int 就行了啊
正解:
期望dp+线性逆元
前置问题: 抛一枚硬币,抛到正面停止,否则继续抛,问期望抛多少次?
同理(不知道哪来的理请去重学期望)可以最终得到