【九校联考-24凉心模拟】锻造(forging)
题目背景
勇者虽然武力值很高,但在经历了多次战斗后,发现怪物越来越难打, 于是开始思考是不是自己平时锻炼没到位,于是苦练一个月后发现……自 己连一个史莱姆都打不过了。 勇者的精灵路由器告诉勇者其实是他自己的武器不好,并把他指引到 了锻造厂。
题目描述
“欢迎啊,老朋友。” 一阵寒暄过后,厂长带他们参观了厂子四周,并给他们讲锻造的流程。 “我们这里的武器分成若干的等级,等级越高武器就越厉害,并且对每 一等级的武器都有两种属性值b 和c,但是我们初始只能花a 个金币来生 产1 把0 级剑……” “所以你们厂子怎么这么垃圾啊,不能一下子就造出来999 级的武器 吗?”勇者不耐烦的打断了厂长的话。 “别着急,还没开始讲锻造呢……那我们举例你手中有一把x 级武器和 一把y 级武器(y = max(x?1; 0)),我们令锻造附加值k = min(cx; by),则 你有k cx 的概率将两把武器融合成一把x + 1 级的武器。” “……但是,锻造不是一帆风顺的,你同样有1 ? k cx 的概率将两把武器 融合成一把max(x ? 1; 0) 级的武器……” 勇者听完后暗暗思忖,他知道厂长一定又想借此机会坑骗他的零花钱, 于是求助这个村最聪明的智者——你,来告诉他,想要强化出一把n 级的 武器,其期望花费为多少? 由于勇者不精通高精度小数,所以你只需要将答案对998244353(7 17 223 + 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.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 数据范围
对于特殊性质处标示为“有”的数据满足p = 1。 对于100% 的数据,0 <=a <=10^7; 0 bx; by; cx; cy < p < 10^7; 0 <=n <=10^7
****这是一个期望的题,首先呢举个抛硬币的例子,抛到正面的期望是二分之一x+1,这道题的是dp[i] = k * dp[i - 1] + dp[i - 2],用i-1和i锻造,成功的期望求出来,如果失败了的话会有一个i-1的刀再和i-2的刀锻造出一个i的刀就好啦,然后接着锻造。。。
*****说来实在惭愧,考试的时候真心没读懂样例。
#include<cmath>
#include<cstdio>
#include<cctype>
#include<algorithm>
using namespace std;
typedef long long ll;
const int p=;
const int N=1e7+;
inline int read(){
int X=,w=;char ch=;
while(!isdigit(ch))
{
w|=ch=='-';
ch=getchar();
}
while(isdigit(ch))
X=(X<<)+(X<<)+(ch^),ch=getchar();
return w?-X:X;
}
int inv[N],b[N],c[N],f[N];
inline int sub(int x,int y){
x-=y;if(x<)x+=p;return x;
}
int main(){
freopen("forging.in","r",stdin);
freopen("forging.out","w",stdout);
inv[]=;
for(int i=;i<N;i++)
inv[i]=(ll)(p-p/i)*inv[p%i]%p;
int n=read();
f[]=read();
int bx=read(),by=read(),cx=read(),cy=read(),mod=read();
b[]=by+;c[]=cy+;
for(int i=;i<n;i++)
{
b[i]=((ll)b[i-]*bx+by)%mod+;
c[i]=((ll)c[i-]*cx+cy)%mod+;
}
f[]=(ll)((ll)c[]*inv[min(b[],c[])]%p+)*f[]%p;
for(int i=;i<=n;i++)
f[i]=((ll)c[i-]*inv[min(b[i-],c[i-])]%p*f[i-]%p+f[i-])%p;
printf("%d\n",f[n]);
return ;
}
【九校联考-24凉心模拟】锻造(forging)的更多相关文章
- 九校联考-DL24凉心模拟Day2总结
T1 锻造 forging 题目描述 "欢迎啊,老朋友." 一阵寒暄过后,厂长带他们参观了厂子四周,并给他们讲锻造的流程. "我们这里的武器分成若干的等级,等级越高武器就 ...
- 中山纪中集训Day4双是测试(划沝) 九校联考-DL24凉心模拟Day2
A组T1 锻造 (forging) 1.1 题目背景 勇者虽然武力值很高,但在经历了多次战斗后,发现怪物越来越难打于是开始思考是不是自己平时锻炼没到位,于是苦练一个月后发现......自己连一个史莱姆 ...
- 九校联考_24OI——餐馆restaurant
凉心模拟D1T1--最简单的一道题 TAT 餐馆(restaurant) 题目背景 铜企鹅是企鹅餐馆的老板,他正在计划如何使得自己本年度收益增加. 题目描述 共有n 种食材,一份食材i 需要花ti 小 ...
- 九校联考 终&启
one term's ending... class:12 school:130...130...130... 至今没有看到九校的排名,如果九校排名正常的话,那yyhs的学生也太可怕了...估计要三百 ...
- 九校联考(DL24凉心模拟) 整除(中国剩余定理+原根性质)
题意简述 给定 \(n, m\),求 \(n|x^m - x\) 在满足 \(x \in [1, n]\) 时合法的 \(x\) 的数量.答案模 \(998244353\).单个测试点包含多组数据. ...
- 洛谷 P4363 [九省联考2018]一双木棋chess 解题报告
P4363 [九省联考2018]一双木棋chess 题目描述 菲菲和牛牛在一块\(n\)行\(m\)列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手. 棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落 ...
- 三校联考 Day3
三校联考 Day3 大水题 题目描述:给出一个圆及圆上的若干个点,问两个点间的最远距离. solution 按极角排序,按顺序枚举,显然距离最远的点是单调的,线性时间可解出答案. 大包子的束缚 题目描 ...
- [九省联考2018]秘密袭击coat
[九省联考2018]秘密袭击coat 研究半天题解啊... 全网几乎唯一的官方做法的题解:链接 别的都是暴力.... 要是n=3333暴力就完了. 一.问题转化 每个联通块第k大的数,直观统计的话,会 ...
- 【BZOJ5250】[九省联考2018]秘密袭击(动态规划)
[BZOJ5250][九省联考2018]秘密袭击(动态规划) 题面 BZOJ 洛谷 给定一棵树,求其所有联通块的权值第\(k\)大的和. 题解 整个\(O(nk(n-k))\)的暴力剪剪枝就给过了.. ...
随机推荐
- HDU 3635 Dragon Balls(带权并查集)
http://acm.hdu.edu.cn/showproblem.php?pid=3635 题意: 有n颗龙珠和n座城市,一开始第i颗龙珠就位于第i座城市,现在有2种操作,第一种操作是将x龙珠所在城 ...
- 1.Jenkins 在windows下的安装与配置
1. 安装Jenkins 1.war包安装:启动Jenkins命令,打开cmd至Jenkins安装目录下,运行命令 java -jar jenkins.war 如果改变默认端口,则指定端口例如端口号1 ...
- LockInt
using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace Game.Lo ...
- 转 class和struct最本质的区别
class和struct最本质的区别是class是引用类型,而struct是值类型,它们在内存中的分配情况有所区别. 什么是class? class(类)是面向对象编程的基本概念,是一种自定义数据结构 ...
- IO模型——IO多路复用机制
(1)I/O多路复用技术通过把多个I/O的阻塞复用到同一个select.poll或epoll的阻塞上,从而使得系统在单线程的情况下可以同时处理多个客户端请求.与传统的多线程/多进程模型比,I/O多路复 ...
- 冒烟测试(smoke testing)
冒烟测试(smoke testing),就是开发人员在个人版本的软件上执行目前的冒烟测试项目,确定新的程序代码不出故障.冒烟测试的对象是每一个新编译的需要正式测试的软件版本,目的是确认软件基本功能正常 ...
- idea使用教程(2)
目录: 1. open和import的区别 2.修改虚拟机配置信息 3.安装目录和设置目录 1. open和import的区别 open:如果本身就是idea项目,则可以直接open打开; impor ...
- 【Linux】人脸识别的封装
写了一个linux下的Face Recognition的封装,当作是练习.语言: C++的封装,结合opencv,使用方便.下载源码:https://github.com/zacario-li/Fac ...
- python float转为decimal
73.2413793103 ======= 73.2414 <type 'float'> ======= <class 'decimal.Decimal'> 当断言这两个值相等 ...
- Bulk RNA-Seq转录组学习
与之对应的是single cell RNA-Seq,后面也会有类似文章. 参考:https://github.com/xuzhougeng/Learn-Bioinformatics/ 作业:RNA-s ...