题目名称 | 4024. 战棋 |
---|---|
输入输出 | chess.in/out |
难度等级 | ★ |
时间限制 | 2000 ms (2 s) |
内存限制 | 512 MiB |
测试数据 | 20 |
题目来源 | syzhaoss 于2024-10-03加入 |
开放分组 | 全部用户 |
提交状态 | |
分类标签 | |
分享题解 |
通过:5, 提交:11, 通过率:45.45% | ||||
小金 | 100 | 0.126 s | 3.55 MiB | C++ |
wdsjl | 100 | 0.144 s | 3.57 MiB | C++ |
wdsjl | 100 | 0.145 s | 3.56 MiB | C++ |
郑霁桓 | 100 | 0.170 s | 3.35 MiB | C++ |
syzhaoss | 100 | 0.171 s | 3.54 MiB | C++ |
郑霁桓 | 85 | 0.169 s | 3.37 MiB | C++ |
wdsjl | 70 | 0.138 s | 3.57 MiB | C++ |
wdsjl | 70 | 0.159 s | 3.58 MiB | C++ |
郑霁桓 | 65 | 0.140 s | 3.37 MiB | C++ |
袁书杰 | 15 | 0.192 s | 3.40 MiB | C++ |
本题关联比赛 | |||
2024国庆练习2 |
关于 战棋 的近10条评论(全部评论) |
---|
小 S 和小 R 各拥有一个棋盘,每个棋盘上从左到右依次摆放着 n 个棋子。
游戏由无限个回合组成。对于一个回合,你需要依次进行攻击前结算、攻击结算、死亡结算,然后回合结束,进入下一个回合。
当一个回合开始时,存在一个玩家的棋盘上没有棋子,那么游戏结束。两方各自加上 (此时自己棋盘上剩下的棋子个数) 的积分。
每个棋子有四个属性:攻击力,生命值,种族,特殊属性。攻击力和生命值为两个正整数,种族要么是鱼人 (”M”,Murloc),要么是海盗 (”P”,Pirate),特殊属性有以下 5 种:
提示 1:鱼人领军和海盗队长棋子被移出棋盘后就不会产生效果了
提示 2:如果有多个特殊属性相同的随从,效果会触发多次而不是一次
提示 3:可能会出现“鱼人”属性的“海盗队长”这类的棋子,这并不影响结算
首先在两个玩家的棋盘上各选出一个棋子,它们即将互相攻击具体的,你需要调用恰好两次以下函数:
int xx, AA, BB, CC;// 这四个数会在数据中给出 int Getid() { return xx = (xx * AA + BB) % CC;}
注意:你不应该在其他任何时候调用这个函数
将两方棋盘上还存在的棋子各自从左到右依次从零开始编号。设函数返回值依次为 x,y,那么即将攻击的两个棋子分别为:
设小 S 棋盘上还剩N1个棋子,则为小 S 棋盘上编号为x%N1的棋子,
设小 R 棋盘上还剩N2个棋子,则为小 R 棋盘上编号为y%N2的棋子,
选定以后,你应该结算海盗队长的效果,接下来这两个棋子互相攻击。具体的,使这两个棋子的生命值各自减去另一个棋 子的攻击力 然后你应该将此时生命值小于等于 0 的所有棋子移出棋盘,同时结算鱼人国王和海盗之魂的效果 (可以发现,结算顺序不影响答案,所以可以以任何顺序结算)。
你需要按照上述规则模拟 500 局游戏,输出两个人各自的总积分。注意:每局游戏开始时棋盘上的棋子会重置(攻击力和生命值还原为初始数值),但 xx 不会重置。
第一行读入五个非负整数 n,xx,AA,BB,CC。
接下来 n 行按照从左到右的顺序描述小 S 的棋子,依次是两个正整数表示初始攻击力、初始生命值,两个大写字母表示种族、特殊属性。
接下来 n 行从左到右描述小 R 的棋子,格式同上。
一行输出两个整数,分别表示小 S 的得分和小 R 的得分。
3 0 0 0 233 10 30 M B 30 30 M K 30 100 M L 10 30 P B 30 30 P C 20 100 P G
0 500
保证总回合数不会超过 $10^5$ ,也就是说你几乎不用关心时间限制的问题。
本题出现的所有读入数值不会超过 1000。
测试点 1-3(15pts):n = 1。
测试点 4-9(30pts):n ≤ 20,只有白板。
测试点 10-13(20pts):n ≤ 5,只有鱼人。
测试点 14-17(20pts):n ≤ 5,只有海盗。
测试点 18-20(15pts):n ≤ 50。