#P3675. 小清新提交答案题

    ID: 4441 远端评测题 1000ms 125MiB 尝试: 0 已通过: 0 难度: (无) 上传者: 标签>洛谷原创提交答案Special Judge模拟退火遗传算法背包 DP洛谷月赛

小清新提交答案题

题目描述

这是一道提交答案题。

相信大家都玩过黄金矿工这款游戏吧!不过如果没有玩过建议赛后再玩。

这道题与原游戏有一些不同,请仔细阅读规则。

将矿区抽象为一个 2s×s2s \times s 的矩形,以左上角作为坐标原点,向右为 xx 轴正方向,向下为 yy 轴正方向,建立平面直角坐标系。

矿工开始在 (s,0)(s,0),矿工可以在 xx 轴一部分:原点与 (2s,0)(2s,0) 的连线(线段)上随意移动。

把矿区中的黄金等物品抽象为坐标系中此矩形内一个个不相交的圆,每个圆有一个价值,可正可负。

这里我们将抓取的过程抽象为以矿工为一端射出一条射线,如果不与任何圆相交(相切不算),那么这次抓取是无效的;否则矿工将会抓取到相交的圆中最早碰到的一个(较近的交点与矿工距离最近的一个圆)。

黄金矿工这款游戏的目的是在规定时间上抓取价值尽量高的物品。

移动与抓取都需要时间,移动 11 单位距离需要花费 k1k_1 的时间,将一次有效抓取的距离定义为抓取到的圆与射线较近的交点与矿工的距离,有效抓取每 11 单位距离需要花费 k2k_2 的时间(无效抓取将会被忽略)。

你将要操纵这位矿工,给出移动和抓取指令,使得获取的价值尽量大。如果某次操作后你所用的总时间超过了规定时限,这次及以后操作将会被忽略。详细格式可见输出描述。

由于矿工比较懒,矿工只接受 2n2n 次操作(nn 为圆的个数,无论是否是无效抓取),多余操作将被忽略。

判定时的 eps 为 10710^{-7}。若你射出的射线与圆两交点的距离不超过该 eps,那么将不会判定为相交。若你的用时与时限的差不超过 eps,那么也不会被判定为超过时限。

由于这是提交答案题,我们会提供输入数据、评分参数和 checker 下载,链接在最后。

输入格式

第一行五个数 s,t,k1,k2,ns,t,k_1,k_2,ns,k1,k2s,k_1,k_2 的含义见题面,tt 为规定时限,nn 为圆的个数。

以下 nn 行每行四个数 xi,yi,ri,vix_i,y_i,r_i,v_i,分别表示编号为 ii 的圆圆心 xx 坐标、圆心 yy 坐标、半径和价值。

nnviv_i 一定为整数,其余量可能为实数。

输出格式

若干行,表示你的操作。

每行开头一个字符为 mg,然后一个空格。(m:move,g:grab)

如果字符是 m,接下来应该接一个实数 p(0p2s)p(0 \leq p \leq 2s),表示将矿工移动到 (p,0)(p,0)

如果字符是 g,接下来应该接一个实数 a(0.2a179.8)a(0.2 \leq a \leq 179.8),表示抓取的射线与 xx 轴正方向夹角为 aa^{\circ}

这两个实数建议保留 1010 位小数。

超过时限和超过 2n2n 次的操作将被忽略。如果在输出文件中包含不合法信息该点可能会直接被判为 00 分。

4 233 1 1 2
3 3 1 1
5 2 1 -1
m 1
g 45
(仅为一种可能输出)

提示

样例解释

开始矿工在 (4,0)(4,0),移动到 (1,0)(1,0),花费 33 时间。

如图,矿工发射出一条射线,抓取到第一个圆,获取到 11 价值,花费 222\sqrt{2} 时间。

当然这不是花费时间最小的解,存在其他解。

评分标准

对于每个点,如果你的输出不符合输出格式,得 00 分。

否则,假设你获得的价值为 aa,每个点有三个评分参数,标准答案 bb、一个实数 ww、一个 0011 的整数 ff

a<0a<0 ,你将获得 00 分。

a>ba>b,你将获得 10+f10+f 分(这意味着部分点你可能会获得 1111 分)。

否则你将获得 10(ab)w\lfloor 10(\frac{a}{b})^w\rfloor 分。(x\lfloor x \rfloor 表示不大于 xx 的最大整数)

如何测试和提交

下载下发文件(见附件),里面有 mine1.in ~ mine10.in、mine1.ans ~ mine10.ans 和 checker.cpp、checker_win32.exe、tester.bat、testlib.h,in、ans 和 checker.cpp 与洛谷上实际测试使用的完全相同。windows 以外的系统,可以自行编译 checker.cpp。

测试时在同一目录下放置 mine1.out ~ mine10.out,对于 windows 用户,运行 tester.bat,会自动调用 checker_win32.exe 返回每个点的结果。对于其它系统的用户,手动调用 checker mine1.in mine1.out mine1.ans 即可返回第一个点的评测结果,其它点同理。

checker 会返回形如 points 0.9 Your ans is aaa, done bbb attempts, time used ccc, ddd remained 的结果,表示这个点你可以获得 99 分,你得到的价值是 aaa,成功进行了开始 bbb 个操作,用了 ccc 的时间,剩下 ddd 的时间。如果剩下的时间为负,表示最后一个(没有成功执行的)操作超时了。

提交时可以直接将 mine1.out ~ mine10.out 打包上传,一个一个点输入提交亦可。