题解

Alice打一次加1,概率p%,Bod打一次加1概率q%
他们打一轮,期望得分p%-q%,有几轮哪?
每轮Bod期望掉血p%,所以有m/(p%)轮,注意最后一轮Bod先挂了,没法反击

所以答案是(m/(p%) - 1) * (p%-q%) + 1 * p%
注意m/(p%)不一定是整数,变换一下
(m-p * inv(100)) * (p-q) * inv ( p ) + p * inv(100)
其中inv(i)是mod998244353LL的乘法逆元

代码

#include <iostream>
#include <cstdio>using namespace std;typedef long long ll;void exgcd(ll a, ll b, ll &x, ll &y)    //拓展欧几里得算法
{if(!b)x = 1, y = 0;else{exgcd(b, a % b, y, x);y -= x * (a / b);}
}ll Mod = 998244353LL;ll inv(ll a)   //求a对b取模的逆元
{ll x, y;ll b = Mod;exgcd(a, b, x, y);return (x + b) % b;
}int main()
{int T;scanf("%d", &T);while (T--) {int m,p,q;scanf("%d%d%d",&m,&p,&q);ll tmp = (m-p*inv(100))%Mod*(p-q)%Mod*inv(p)%Mod;printf("%lld\n", ((tmp+p*inv(100))%Mod+Mod)%Mod);}return 0;
}

Problem Description

你在打游戏的时候碰到了如下问题:

​ 有两个人记作Alice和Bob,Bob的生命值为mmm,Alice的生命值很高,所以可以认为是无限的。两个人的攻击命中率分别为p%,q%p%,q%p%,q%。两个人轮流攻击对方。从Alice开始攻击,每次攻击的时候,如果Alice命中,那么能让对方的生命值减低111,同时自己的生命值能恢复111,如果Bob命中,那么能让对方的生命值减低111,注意Bob不会自己回血。

直到Bob的血量变为000,游戏结束。Alice想知道,游戏结束的时候,自己期望生命值变化是多少,对998244353998244353998244353取模。

注意这里的变化量不是绝对值,也就是如果50%50%50%的概率加一,50%50%50%的概率减一,那么期望的变化量就是000。

对于一个分数a/ba/ba/b,其中gcd⁡(a,b)=1\gcd(a,b)=1gcd(a,b)=1,那么我们认为这个分数对998244353998244353998244353取模的值为一个数c(0≤c<998244353)c(0\leq c < 998244353)c(0≤c<998244353)满足bc≡a(mod998244353)bc\equiv a \pmod {998244353}bc≡a(mod998244353)。

Input

第一行一个正整数T(1≤T≤104)T(1\leq T\leq 10^4)T(1≤T≤104)表示数据组数。

对于每组数据,第一行三个整数m,p,q(1≤m≤109,1≤p,q≤100)m, p, q(1\leq m \leq 10^9, 1\leq p,q\leq 100)m,p,q(1≤m≤109,1≤p,q≤100)。

Output

每组测试数据,输出一个数,表示答案。

Sample Input

2
4 100 100
1 50 50

Sample Output

1
499122177Hint
第一组数据中,每次都能命中,所以Alice能恢复 4 点生命值,减低 3 点生命值,变化量必定为 1。第二组数据中,对应的分数为 1/2,在Alice命中Bob之前,Bob能期望命中Alice 1/2 次。

[2020 年百度之星·程序设计大赛 - 复赛] Battle for Wosneth相关推荐

  1. 2020 年百度之星·程序设计大赛 - 复赛 1001Battle for Wosneth

    problem Battle for Wosneth Accepts: 1174 Submissions: 5432 Time Limit: 2000/1000 MS (Java/Others) Me ...

  2. 2020 年百度之星·程序设计大赛 - 复赛 1002 Binary Addition

    problem Binary Addition Accepts: 851 Submissions: 3320 Time Limit: 2000/1000 MS (Java/Others) Memory ...

  3. [2020 年百度之星·程序设计大赛 - 复赛] Binary Addition

    题解 +1会把前面所有1变成0,第一个0变成1,也就是批量消除前缀1,显然他只会用一次, 枚举时机就好了 如果a[i]是0,次数为a[0 ~ i-1]中0的个数+b[0 ~ i-1]中1的个数+1(+ ...

  4. 2017百度之星程序设计大赛 - 复赛 01,03,05

    Arithmetic of Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  5. php解:2006 年百度之星程序设计大赛复赛题目 4 ----彩球游戏

    2006 年百度之星程序设计大赛复赛题目 4 彩球游戏 X 博士是一个研究儿童智力开发方法的科学家,他为幼儿教育领域做出了许多贡献.最近, X 博士正在研究一种适合儿童的游戏,用以辅助发展儿童的观察力 ...

  6. 2020 年百度之星·程序设计大赛部分题解

    目录 Dec Covid Car Intersection Dec 2020 年百度之星·程序设计大赛 - 初赛一 HUD 6745  题解: 线性DP:f(i,j) 表示从i开始减,从j开始减时互质 ...

  7. 2020年百度之星·程序设计大赛-初赛一

    Pro.ID 1001 Drink 题解 1002 GPA 题解 1003 Dec 题解 1004 Civilization 1005 Rotate 题解 1006 Matrix 1007 Mosqu ...

  8. 2018“百度之星”程序设计大赛 - 复赛

    没有兄弟的舞会  Accepts: 928  Submissions: 2446  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 6553 ...

  9. 2020 年百度之星·程序设计大赛 · 官方题解汇总

    1.测试赛 2.初赛一 留个备份,方便以后找 3.初赛二 4.初赛三 5.复赛

  10. 2021 年百度之星·程序设计大赛 - 复赛 1002 Add or Multiply 1(第2类斯特林数)

    problem solution 想到了是n个小球放到m个盒子里以后,剩下的就是板子了 #include<bits/stdc++.h> using namespace std; typed ...

最新文章

  1. 什么是Java实例初始化块
  2. php文件里直接写上?xml version=1.0 encoding=utf-8?出错?
  3. iphone 使用委托(delegate)在不同的窗口之间传递数据
  4. android StringBuffer实现换行
  5. Python--CSV模块
  6. mysql filck_顺序全局id生成方案-flickr(转载)
  7. java函数的参数传递
  8. maven下设置默认jdk版本和maven项目构建默认使用jdk版本
  9. Java基础入门(第2版)
  10. 服务器重装系统需要按什么,安装服务器系统前我们该做些什么
  11. 小米音箱蓝牙连不上_小米互联网音箱蓝牙怎么连接?方法如下
  12. 虚拟仪器是在计算机基础上通过增加相关硬件和软件构建而成的仪器,无损检测考试...
  13. 北极科考:我们为什么要在北极呆上一年?
  14. java实现屏幕亮度调节
  15. 精品分享:基于 SpringBoot + Vue 开发的云盘系统(含大文件断点续传剖析)
  16. 一个表情包引发的悬案!
  17. python文件名可以用中文吗_python对中文路径/文件名的重命名
  18. Python绘制K线图之可视化神器pyecharts
  19. AVM环视:系统搭建整体流程
  20. java 有序的list_Java 中的 List —— 有序序列

热门文章

  1. SocketTool
  2. GBase数据库-时间函数
  3. matlab电气教程下载,Matlab 2020b介绍及下载安装步骤
  4. Spring Boot 菜鸟教程 2 Data JPA
  5. 软件项目管理 1.2.PMBOK与软件项目管理知识体系
  6. 2021年,产品需求文档PRD模板
  7. Linux安全加固 附脚本
  8. Hadoop HDFS命令
  9. HttpClient 通过资源URL下载资源
  10. Linux 下rzsz最新安装方法