CF241C Mirror Box
题目描述
“镜箱”是伊朗国家游乐园(INAP)里一种很受欢迎的游戏。在这个游戏中,有一个长 $10^5$ 厘米、高 $100$ 厘米的木箱。箱子的顶部和底部的某些部分被镜子覆盖。箱子的对面分别有两个很小的孔,分别位于离地面 $h_l$ 和 $h_r$ 厘米的高度处。下图展示了箱子的样子。

在游戏中,你会获得一把激光枪,可以射击一次。激光束必须从一个孔进入,并从另一个孔射出。每面镜子都有一个预设的得分 $v_i$,如果你的激光束击中了该镜子,你将获得相应的分数。而且——为了增加趣味性——激光束不能多次击中同一面镜子。
给定箱子的相关信息,你需要计算玩家所能获得的最大得分。请注意,反射遵循“入射角等于反射角”定律。
输入格式
输入的第一行为 $h_l, h_r, n$($0 < h_l, h_r < 100$, $0 \leq n \leq 100$)——表示两个孔的高度以及镜子的数量。
接下来的 $n$ 行,每行描述一个镜子。第 $i$ 行包含 $v_i, c_i, a_i, b_i$,其中 $v_i$($1 \leq v_i \leq 1000$)为该镜子所得分数;$c_i$ 为该镜子的位置—若$c_i$为 “T” 表示在顶部,如为 “F” 则在地面;$a_i$ 与 $b_i$($0 \leq a_i < b_i \leq 10^5$)为该镜子的起止 $x$ 坐标。
任意两面镜子不共点。$x$ 坐标沿从左至右递增方向,左端带高度 $h_l$ 的孔的 $x$ 坐标为 $0$,右端带高度 $h_r$ 的孔的 $x$ 坐标为 $10^5$。
输出格式
输出一行一个整数,表示玩家所能获得的最大分数。
说明/提示
第二个样例如上图所示。红色的光线得分为 $10+50+5+35+8+2=110$,而蓝色得分为 $120$。
题面中的红色光线仅仅是一个示意,并不表示真的存在一条得分为 110 的激光路径,因此第二个样例中实际上不存在得分为 110 的方案。
由 ChatGPT 5 翻译