题目名称 4024. 战棋
输入输出 chess.in/out
难度等级
时间限制 2000 ms (2 s)
内存限制 512 MiB
测试数据 20
题目来源 Gravatarsyzhaoss 于2024-10-03加入
开放分组 全部用户
提交状态
分类标签
分享题解
通过:5, 提交:11, 通过率:45.45%
Gravatar小金 100 0.126 s 3.55 MiB C++
Gravatarwdsjl 100 0.144 s 3.57 MiB C++
Gravatarwdsjl 100 0.145 s 3.56 MiB C++
Gravatar郑霁桓 100 0.170 s 3.35 MiB C++
Gravatarsyzhaoss 100 0.171 s 3.54 MiB C++
Gravatar郑霁桓 85 0.169 s 3.37 MiB C++
Gravatarwdsjl 70 0.138 s 3.57 MiB C++
Gravatarwdsjl 70 0.159 s 3.58 MiB C++
Gravatar郑霁桓 65 0.140 s 3.37 MiB C++
Gravatar袁书杰 15 0.192 s 3.40 MiB C++
本题关联比赛
2024国庆练习2
关于 战棋 的近10条评论(全部评论)

4024. 战棋

★   输入文件:chess.in   输出文件:chess.out   简单对比
时间限制:2 s   内存限制:512 MiB

【题目描述】

小 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。