编程介的小学生 2017-03-02 14:21 采纳率: 20.5%
浏览 736
已采纳

Legendary Pokemon

Do you know Pokemon? It's a kind of very lovely cute sprite. In the world of pokemon, people live with their favorite pokemons and train them with love. One night, you saw a strange yet powerful pokemon in a narrow dark cave. 'It must be the legendary pokemon. If only I could catch him!' You thought. Setting our your best pokemon, you decided to catch it - the legendary pokemon.
As a skilled pokemon trainer, you know that all you have to do is to battle with it and throw a magic BALL to it during the battle. If you're lucky enough, the pokemon will be caught in the BALL, and become yours. It sounds easy, but the balls can not always catch pokemons, especially fierce ones, so you must be careful and follow a perfect strategy.

The battle is divided into rounds. In each round, your pokemon makes a move first, then does the wild pokemon (you can choose not to do anything). Each round, a pokemon makes a move or uses an item to attack its opponent or heal itself. You may also use a BALL to catch it in a round.

A move may be used as many times as you like, but can only be of the following three types:

  1. Normal Attack
    The move attacks the opponent. As a result, the HP(life value) of the opponent will decrease.

  2. Status change
    The move itself does not cause any damage, but you can make your opponent sleepy or confused. if your opponent's sleepy, he cannot make any move, if your opponent is confused, he will attack himself sometimes. These will be effective within 3 rounds (that is, the victim will be in the wrong status 3 times, and during that time, any Status-change type moves will not take effect).

  3. Poison attack
    This move attacks the opponent and makes him poisoned. If a pokemon is poisoned, it will lose an additional poison value units of HP BEFORE he can make a move. The effect lasts for 3 rounds(that is, the victim will be hurt by poison 3 times, during that time, any poison-type attack will still do damage, but will take no OTHER effect)

The damage that the opponent will take after being attacked by a Normal Attack or Poison attack is called damage value of the move; the probability that the move hits the target is called accuracy of that move. If a pokemon is confused by a move, the probability that it CHOOSE to attack itself is called confusion value of that move.

There is only one type of item available - Hyper Potion. It recovers a pokemon 200 HP.

A BALL could be of the following types:

1.Poke Ball - Used for catching pokemon. (BasicProbability=0.05)
2.Great Ball - Catches pokemon more easily than a pokeball. (BasicProbability=0.1)
3.Ultra Ball - Capture pokemon more easily than with the great ball. (BasicProbability=0.15)
4.Level Ball - If your pokemon is higher levels than the target pokemon then BasicProbability=0.18, otherwise, it is the same as a Great Ball.
5.Love Ball - Captures pokemon of an opposite gender than yours easily (BasicProbability=0.20), otherwise, BasicProbability=0.0

The probability that a BALL can catch a pokemon is computed this way:

P = BasicProbability + CriticalLifeBonus + PoisonedBonus + StatusBonus
CriticalLifeBonus=0.05 if and only if 50 < the target's HP <=100.
CriticalLifeBonus=0.1 if and only if 0 < the target's HP <=50.
PoisonedBonus=0.1 if and only if the target is poisoned.
StatusBonus=0.05 if and only if the target is in the wrong status(sleepy or confused).

All Bonus values are set to zero by default.

Initially, Both pockemons' HP are full(HP values can never be greater than their maximal values) and are in good health(not sleepy, confused or poisoned). Then, the battle starts. When one of the pokemons's HP is 0 or below 0, the battle ends immediately and the legendary pokemon goes away(you failed). When you catch it, the battle also ends(congratulations!)

Since the pokemon is wild, it has not been trained mentally. So it follows a very simple strategy during the battle:

  1. In the ith round, he may decide to run away. The probability he makes this decision is run[i]%; (he never fails to escape even if he's sleepy, confused or poisoned)
  2. If he decided to continue the battle, he check if his HP. If it's not greater than 150, he uses a Hyper Potion(even if he's sleepy or confused) if he has any, otherwise, he uses his only normal attack move - Cross Chop. Its Accuracy is 30%, but the damage value is 300.

It is well known that the legendary pokemon is at level 50 and is male. His initial HP is always 999, but people don't know how many Hyper Potions he has. People never saw him battle for 6 or more rounds, so you may assume this is also true for your battle.

Input

The input will contain no more than 20 test cases. Each test case begins with a line containing three integers l,g and HP describing your pokemon. l is your pokemon's level(1<=l<=100), g(0<=g<=1) is its gender. 0=male, 1=female. HP is your initial(and maximal) HP value(1<=HP<=999). The second line contains 5 integers. The ith integer is the value of run[i], (i.e.run[i]% is the probability that the wild pokemon flee in his ith move.) It is guaranteed that 0<=run[i]<=run[i+1] for all 1<=i<=4, and that run[5]=100. The next line contains two integers p1, p2(0<=p1,p2<=10). p1 is the number of Hyper Potions that you have, p2 is that of the wild pokemon's. The next line contains 5 integers b1,b2,b3,b4,b5(0<=b1,b2,b3,b4,b5<=5), the number of corresponding balls you have(i.e b1 for Poke Ball...). The next line contains a single integer k(0<=k<=4), the number of moves your pokemon masters. In the following k lines, each line begins with an integer t(1<=t<=3), representing the type of the move. If t=1, there are two integers following in the same line: damage value and accuracy*100; if t=2, there are two integers following in the same line: confusion value*100 and accuracy*100. Note that the move makes the opponent sleepy if and only if confusion value=0. If t=3, there are three integers following in the same line: damage value, poison value and accuracy*100. All the values defined in the three types will be between 0 and 999 (inclusive) while 0<=accuracy, confusion<=100. The test case containing l=g=HP=0 will terminate the input and should not be regarded as a test case.

Output

For each test case, output a single line containing the probability that you catch the pokemon if you follows a perfect strategy. Print your answer with four decimal places.

Sample Input

30 1 500
10 100 100 100 100
0 10
0 0 0 0 1
2
1 100 80
3 300 50 60
0 0 0

Sample Output

0.2340

  • 写回答

2条回答 默认 最新

  • threenewbee 2017-03-07 15:05
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值