#NC26JA. 2026年南昌市信息学竞赛普及组-T1 决斗
2026年南昌市信息学竞赛普及组-T1 决斗
决斗(duel)
- 题目 PID:NC26JA
- 时间限制:1 秒
- 内存限制:512 MiB
问题背景
在近期的凹凸曼人气票选活动中,赛罗输给了迪迦,他很不服气,于是要找迪迦单挑一次。
问题描述
每个凹凸曼有 5 个基本属性:攻击力、防御力、杀伤力、速度、(初始)生命值。决斗按以下规则进行:
- 双方轮流攻击,速度高的一方优先攻击。如果速度相同,则以“赛罗、迪迦、迪迦、赛罗”这样的周期循环进行攻击(参见样例 2);如果速度不同,则由速度高的一方先攻,之后双方交替攻击。
- 每方攻击时,对对方造成的实际损伤(使对方生命值的减少量)为 $\left\lceil\text{己方杀伤力}\times\text{攻防权重}\right\rceil$。如果对方生命值降为 或负数,则当前进攻方获胜。攻防权重的定义见下一条, 表示向上取整。
- 如果己方攻击力 对方防御力,则$$\text{攻防权重}=1+(\text{己方攻击力}-\text{对方防御力})\times5\%,$$但最高不能超过 ;否则$$\text{攻防权重}=1-(\text{对方防御力}-\text{己方攻击力})\times2.5\%,$$但最低不能低于 。
注意:为避免浮点数误差导致可能的偏差,建议对 double 变量 取上整写成 ceil(x-0.000001)。
输入格式
从文件 duel.in 中读取数据。
第 1 行 5 个正整数 ,依次表示赛罗的攻击力、防御力、杀伤力、速度、初始生命值。
第 2 行 5 个正整数 ,依次表示迪迦的攻击力、防御力、杀伤力、速度、初始生命值。
输出格式
输出到文件 duel.out。
第 1 行一个字符串表示获胜方,赛罗胜则输出 Zero,迪迦胜则输出 Tiga。
第 2 行一个正整数,表示获胜方最后还剩多少生命值。
文件读写示例
freopen("duel.in", "r", stdin);
freopen("duel.out", "w", stdout);
样例 1
1 1 1 2 1
1 1 1 1 1
Zero
1
样例 1 解释
赛罗先攻,攻防权重为 ,造成损伤为 ,第一次攻击后就取胜,自身生命值未减少。
样例 2
1 1 1 1 4
1 1 1 1 4
Tiga
1
样例 2 解释
双方同速,按“赛罗、迪迦、迪迦、赛罗”的顺序攻击。双方攻击力、防御力、杀伤力都为 ,所以攻防权重都为 ,每次攻击造成损伤也都为 。4 次攻击各减 2 点生命,剩余生命均为 2。接下来又轮到赛罗攻击,迪迦生命值降为 1;然后迪迦攻击,赛罗生命值降为 1;然后又是迪迦攻击,赛罗生命值降为 0,赛罗失败,迪迦剩余生命值为 1。
样例 3
30 30 50 20 250
25 25 45 15 300
Zero
90
样例 3 解释
赛罗速度 大于迪迦速度 ,赛罗先手。
赛罗打迪迦的攻防权重为 ,造成损伤为 。
迪迦打赛罗的攻防权重为 ,造成损伤为 。
以下为战斗过程:
赛罗攻击,迪迦剩余生命值 = 300 - 63 = 237
迪迦攻击,赛罗剩余生命值 = 250 - 40 = 210
赛罗攻击,迪迦剩余生命值 = 237 - 63 = 174
迪迦攻击,赛罗剩余生命值 = 210 - 40 = 170
赛罗攻击,迪迦剩余生命值 = 174 - 63 = 111
迪迦攻击,赛罗剩余生命值 = 170 - 40 = 130
赛罗攻击,迪迦剩余生命值 = 111 - 63 = 48
迪迦攻击,赛罗剩余生命值 = 130 - 40 = 90
赛罗攻击,迪迦剩余生命值 = 48 - 63 = -15,赛罗获胜,剩余生命值为 90
数据规模与约定
对于 的数据,,,,。
难度
未评定
通过率
—
尝试
0
通过
0
- ID
- 3910
- 类型
- 传统题
- Time Limit
- 1000ms
- Memory Limit
- 512MiB
- 上传者
相关
在下列比赛中: