CF1955H.The Most Reckless Defense
提高+/省选-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
你正在玩一款非常流行的塔防游戏“Runnerfield 2”。在这款游戏中,玩家需要布置防御塔来攻击从起点移动到玩家基地的敌人。
给定一个 n×m 的网格,其中已经放置了 k 个防御塔,并且有一条敌人会经过的路径。第 x 行第 y 列的格子记作 (x,y)。
每秒钟,每个防御塔会对其攻击范围内的所有敌人造成 pi 点伤害。例如,如果敌人在格子 (x,y),而防御塔在 (xi,yi),攻击范围为 r,那么如果满足 (x−xi)2+(y−yi)2≤r2,敌人就会受到 pi 点伤害。
敌人会从格子 (1,1) 移动到格子 (n,m),并且会恰好经过路径上的每个格子一次。敌人每次可以瞬间移动到相邻的水平或垂直格子,但在移动之前,会在当前格子停留一秒。如果在这一秒内敌人的生命值降为零或更低,则无法继续移动。如果敌人到达 (n,m) 并且还能再移动一次,则玩家失败。
默认情况下,所有防御塔的攻击范围为零,但玩家可以将某个防御塔的攻击范围设置为整数 r(r>0),此时所有敌人的生命值会增加 3r。但是,每个 r 最多只能被一个防御塔使用。
假设敌人的基础生命值为 h。如果防御塔的攻击范围分别为 2、4 和 5,那么敌人在路径开始时的生命值为 h+32+34+35=h+9+81+243=h+333。攻击范围的选择在敌人出现前一次性确定,游戏开始后不能更改。
请你求出能够设置攻击范围,使得敌人以基础生命值 h 通过(不考虑因设置攻击范围而增加的生命值)且玩家不会失败的最大 h。
如果即使敌人基础生命值为 1 也无法获胜,则输出 0。
输入格式
第一行包含一个整数 t(1≤t≤100),表示测试用例数量。
每个测试用例的第一行包含三个整数 n、m 和 k(2≤n,m≤50,1≤k<n⋅m),表示场地的尺寸和防御塔数量。
接下来 n 行,每行包含 m 个字符,描述场地的每一行,其中字符“.”表示空格子,字符“#”表示敌人会经过的路径格子。
接下来 k 行,每行包含三个整数 xi、yi、pi(1≤xi≤n,1≤yi≤m,1≤pi≤500),表示防御塔的坐标和攻击参数。所有坐标均对应于场地上的空格子,且所有 (xi,yi) 两两不同。
保证所有测试用例中 n⋅m 的总和不超过 2500。
输出格式
对于每个测试用例,输出一个整数,表示能够设置攻击范围,使得敌人以基础生命值 h 通过且玩家不会失败的最大 h(不考虑因设置攻击范围而增加的生命值)。
如果即使敌人基础生命值为 1 也无法获胜,则输出 0。
输入输出样例
输入#1
6 2 2 1 #. ## 1 2 1 2 2 1 #. ## 1 2 2 2 2 1 #. ## 1 2 500 3 3 2 #.. ##. .## 1 2 4 3 1 3 3 5 2 #.### #.#.# ###.# 2 2 2 2 4 2 5 5 4 #.... #.... #.... #.... ##### 3 2 142 4 5 9 2 5 79 1 3 50
输出#1
0 1 1491 11 8 1797
说明/提示
在第一个样例中,增加防御塔的攻击范围没有意义,即使敌人只有 1 点生命值也无法击败。
在第二个样例中,防御塔的攻击范围为 1,它会在 (1,1) 和 (2,2) 两个格子对敌人造成伤害。
在第三个样例中,防御塔的攻击范围为 2,它会在所有路径格子对敌人造成伤害。如果敌人的基础生命值为 1491,那么加上攻击范围带来的生命值后为 1491+32=1500,正好等于防御塔在三秒内对敌人造成的伤害。
在第四个样例中,(1,2) 处的防御塔攻击范围为 1,(3,1) 处的防御塔攻击范围为 2。
由 ChatGPT 4.1 翻译
输入解题思路,AI测评打分。不知道怎么写?