#GYM104741G. 我要成为宝可梦大师!
我要成为宝可梦大师!
本题没有可用的提交语言。
Description
Pecco是一名宝可梦训练家,今天他和他的朋友Index进行宝可梦对战。
一只宝可梦有六项能力值:HP、物攻,物防,特攻,特防,速度。此外宝可梦具有1到2种属性。
因为Pecco和Index都只带了一只50级的宝可梦,所以我们把他们的对战过程简化如下:
首先,速度较快的一方打出招式,之后两只宝可梦轮流打出招式(保证双方的速度不同)。招式分为物理招式和特殊招式,并具有固定的属性、威力和命中率。使用招式后,先按照命中率计算能否命中,如果命中,可以使对方受到伤害(HP降低),伤害按以下公式计算:
其中:
- 当招式是物理招式时,A和D分别表示招式打出者的物攻和承受者的物防;当招式是特殊招式时,A和D分别表示招式打出者的特攻和承受者的特防。
- P 表示技能的威力。
- k1表示属性一致加成,当招式的属性和宝可梦的其中一个属性相同时,,否则k1 = 1
- k2表示属性相克加成。宝可梦世界中一共有18种属性:一般(Normal)、飞行(Flying)、火(Fire)、超能力(Psychic)、水(Water)、虫(Bug)、电(Electric)、岩石(Rock)、草(Grass)、幽灵(Ghost)、冰(Ice)、龙(Dragon)、格斗(Fighting)、恶(Dark)、毒(Poison)、钢(Steel)、地面(Ground)、妖精(Fairy)。下表每一行表示某属性的招式对各个属性的宝可梦的属性相克加成,例如使用火属性的招式攻击水属性的宝可梦时,。对于具有两个属性的宝可梦,分别计算属性相克加成然后相乘,例如使用冰属性的招式攻击飞行+龙属性的宝可梦时,k2 = 2 × 2 = 4。一个特殊规则是,如果k2 = 0,那么伤害将直接为0,而不会按照上面的公式计算。
一般 格斗 飞行 毒 地面 岩石 虫 幽灵 钢 火 水 草 电 超能力 冰 龙 恶 妖精 一般 1× 1× 1× 1× 1× 1⁄2× 1× 0× 1⁄2× 1× 1× 1× 1× 1× 1× 1× 1× 1× 格斗 2× 1× 1⁄2× 1⁄2× 1× 2× 1⁄2× 0× 2× 1× 1× 1× 1× 1⁄2× 2× 1× 2× 1⁄2× 飞行 1× 2× 1× 1× 1× 1⁄2× 2× 1× 1⁄2× 1× 1× 2× 1⁄2× 1× 1× 1× 1× 1× 毒 1× 1× 1× 1⁄2× 1⁄2× 1⁄2× 1× 1⁄2× 0× 1× 1× 2× 1× 1× 1× 1× 1× 2× 地面 1× 1× 0× 2× 1× 2× 1⁄2× 1× 2× 2× 1× 1⁄2× 2× 1× 1× 1× 1× 1× 岩石 1× 1⁄2× 2× 1× 1⁄2× 1× 2× 1× 1⁄2× 2× 1× 1× 1× 1× 2× 1× 1× 1× 虫 1× 1⁄2× 1⁄2× 1⁄2× 1× 1× 1× 1⁄2× 1⁄2× 1⁄2× 1× 2× 1× 2× 1× 1× 2× 1⁄2× 幽灵 0× 1× 1× 1× 1× 1× 1× 2× 1× 1× 1× 1× 1× 2× 1× 1× 1⁄2× 1× 钢 1× 1× 1× 1× 1× 2× 1× 1× 1⁄2× 1⁄2× 1⁄2× 1× 1⁄2× 1× 2× 1× 1× 2× 火 1× 1× 1× 1× 1× 1⁄2× 2× 1× 2× 1⁄2× 1⁄2× 2× 1× 1× 2× 1⁄2× 1× 1× 水 1× 1× 1× 1× 2× 2× 1× 1× 1× 2× 1⁄2× 1⁄2× 1× 1× 1× 1⁄2× 1× 1× 草 1× 1× 1⁄2× 1⁄2× 2× 2× 1⁄2× 1× 1⁄2× 1⁄2× 2× 1⁄2× 1× 1× 1× 1⁄2× 1× 1× 电 1× 1× 2× 1× 0× 1× 1× 1× 1× 1× 2× 1⁄2× 1⁄2× 1× 1× 1⁄2× 1× 1× 超能力 1× 2× 1× 2× 1× 1× 1× 1× 1⁄2× 1× 1× 1× 1× 1⁄2× 1× 1× 0× 1× 冰 1× 1× 2× 1× 2× 1× 1× 1× 1⁄2× 1⁄2× 1⁄2× 2× 1× 1× 1⁄2× 2× 1× 1× 龙 1× 1× 1× 1× 1× 1× 1× 1× 1⁄2× 1× 1× 1× 1× 1× 1× 2× 1× 0× 恶 1× 1⁄2× 1× 1× 1× 1× 1× 2× 1× 1× 1× 1× 1× 2× 1× 1× 1⁄2× 1⁄2× 妖精 1× 2× 1× 1⁄2× 1× 1× 1× 1× 1⁄2× 1⁄2× 1× 1× 1× 1× 1× 2× 2× 1× - 表示17到20之间的随机整数(包含边界)。
- 注意最后的结果要向下取整,但至少为1。
Pecco和Index的对战地点选在白银山,这里终年下冰雹,每个回合结束后(双方轮流打出一个招式后),双方都会受到伤害:,其中hp表示该宝可梦的初始HP。为了简化题目,我们假设冰属性的宝可梦也会受到伤害,这与游戏的设定不同。
直到一方HP减少到0或更低,则该方落败。如果两方同时倒下,认为速度较快的一方落败。
假设Pecco和Index都很聪明,每回合都会令他们的宝可梦打出使自己获胜概率最高的招式。试求出 Pecco的胜率。
整个输入文件共12行,前6行为Pecco的宝可梦的描述,后6行为Index的宝可梦的描述。
每个宝可梦的描述的第一行包含6个正整数( ≤ 500),表示它的HP、物攻,物防,特攻,特防和速度。
接下来一行包含一个整数n(),表示该宝可梦属性的数量。然后是n个属性字符串,表示该宝可梦的属性。
接下来四行分别描述该宝可梦的四个技能。每行包含两个正整数p和h(p ≤ 300, h ≤ 100),表示威力是p、命中率是。然后是一个属性字符串t。再然后是一个字符串Physical或Special,Physical表示这是物理招式,Special表示这是特殊招式。
属性字符串的取值包括:"Normal", "Fire", "Fighting", "Water", "Flying", "Grass", "Poison", "Electric", "Ground", "Psychic", "Rock", "Ice", "Bug", "Dragon", "Ghost", "Dark", "Steel", "Fairy"。
输出一行一个实数,表示Pecco的胜率。如果你的答案与评测机的答案的绝对误差在10 - 4之内,则会被认为是正确的。
Input
整个输入文件共12行,前6行为Pecco的宝可梦的描述,后6行为Index的宝可梦的描述。
每个宝可梦的描述的第一行包含6个正整数( ≤ 500),表示它的HP、物攻,物防,特攻,特防和速度。
接下来一行包含一个整数n(),表示该宝可梦属性的数量。然后是n个属性字符串,表示该宝可梦的属性。
接下来四行分别描述该宝可梦的四个技能。每行包含两个正整数p和h(p ≤ 300, h ≤ 100),表示威力是p、命中率是。然后是一个属性字符串t。再然后是一个字符串Physical或Special,Physical表示这是物理招式,Special表示这是特殊招式。
属性字符串的取值包括:"Normal", "Fire", "Fighting", "Water", "Flying", "Grass", "Poison", "Electric", "Ground", "Psychic", "Rock", "Ice", "Bug", "Dragon", "Ghost", "Dark", "Steel", "Fairy"。
Output
输出一行一个实数,表示Pecco的胜率。如果你的答案与评测机的答案的绝对误差在10 - 4之内,则会被认为是正确的。
145 90 135 150 110 80
2 Electric Steel
110 70 Electric Special
90 100 Electric Special
80 100 Steel Special
150 90 Normal Physical
143 85 85 145 135 100
2 Psychic Fairy
80 100 Fairy Special
90 100 Psychic Special
80 100 Ghost Special
85 100 Normal Physical
1 100 100 100 100 105
1 Dragon
250 90 Normal Special
240 100 Normal Special
40 100 Normal Special
40 100 Normal Physical
112 100 100 100 100 100
1 Dragon
100 100 Normal Special
100 100 Ice Special
100 100 Fairy Special
100 100 Dragon Special
1.000000
0.225000