UOJ Logo Universal Online Judge

UOJ

#657. 【ULR #2】全是 AI 的比赛

附件下载 统计

这是一道提交答案题。

为了使得自己的 Rating 看起来不像改出来的。超级管理员 Skip 蚤决定举办几场比赛刷 Rating。

为了安全起见,这几场比赛除了超级管理员 Skip 蚤自己以外全是 AI。

这几场比赛不是传统赛制的比赛,它遵循如下所述的规则。

n 名玩家,其中,Skip 蚤是 1 号玩家,按顺时针序排列。第 i 名玩家初始时有等级 ai 和体力 bi,以及能量 pi,初始时 pi=0

游戏至多进行 T=104 轮,每轮按 1n 顺序执行每个存活玩家的回合。在一个回合中,若玩家 A 当前等级为 a,能量为 p,他可以执行以下两种操作之一或什么也不干:

  • 选择一名存活的其它玩家 B,使玩家 B 的能量增加 k,这里要求 1ka
  • 选择一名存活的其它玩家 B,对玩家 B 造成 k 点伤害,即使玩家 B 体力减少 k,这里要求 1ka+p,且随后玩家 A 能量 p 清零。若玩家 B 体力减少到 0 以下,视为玩家 A 击杀了玩家 B,玩家 A 的等级会增加上玩家 B 的等级。

当场上只有一名玩家时,视为该玩家获胜。获胜的玩家将获得 Rating 8000 的奖励。

Skip 蚤希望在 T 轮内获胜。同时,它希望损失的体力尽量小。你可以认为初始时 Skip 蚤(1 号玩家)的体力是无穷大。

Skip 蚤还要去对付跳蚤国王,所以,它委托你帮忙,希望你代打这几场比赛。

AI 描述

在该游戏中,玩家 2n 都是 AI,遵循以下策略行动:

对于 i 号玩家,ji 号玩家对它会有一个威胁度 ci,j0ci,jM)。初始时的 ci,j 给定。

在每个回合中,i 号玩家按如下策略行动:若存在 ci,j+aj2Bi,则选择 ci,j+aj2 最大的 j 号玩家(有多个选择 i 号玩家顺时针序上一个),对该玩家造成尽可能大的伤害;否则若存在 ci,j+aj2Ai ,则选择 ci,j+aj2 最小的 j 号玩家(有多个选择 i 号玩家顺时针序下一个),为该玩家增加尽可能多的能量;否则什么都不会做。这里 0Ai<Bi

j 号玩家攻击了 i 号玩家并造成 k 点伤害,会令 ci,j 变为 min(ci,j+Pi+k,M);若 j 号玩家为 i 号玩家增加了 k 点能量,会令 ci,j 变为 max(ci,jQik,0)

输入格式

本题为提交答案题。所有输入数据 D1.in ~ D5.in 见输入数据下载。

第一行输入三个正整数 n,M,maxS

接下来一行输入 n 个正整数,第 i 个为 ai

接下来一行输入 n1 个正整数,第 i 个为 bi+1

接下来 2(n1) 行,第 2i1 行依次输入 n1 个整数 c1,c2,,ci,ci+2,,cn,第 2i 行输入四个整数 Ai,Bi,Pi,Qi

输出格式

对于每组数据,你需要输出你每一轮的行动方案。针对给定的输入数据,你需要分别提交 D1.out ~ D5.out。

第一行输出一个正整数 k,表示你的方案中的轮数(1kT)。

接下来 k 行,第 i 行输出表示第 i 轮的方案。

先输出一个整数 type{0,1,2}表示第 i 轮的行动类型:

  • type=0,表示第 i 轮你(1 号玩家)什么也不干。

  • type=1,接下来输出两个正整数 xi,yi,表示第 i 轮你(1 号玩家)使 xi 号玩家的能量增加了 yi。这里要求 2xinxi 号玩家仍存活且 1yia,其中 a1 号玩家当前的等级。

  • type=2,接下来输出两个正整数 xi,yi,表示第 i 轮你(1 号玩家)对 xi 号玩家造成了 yi 点伤害。这里要求 2xinxi 号玩家仍存活且 1yia+p,其中 a1 号玩家当前的等级,p1 号玩家当前的能量。

评分方式

对于每组数据,若你输出的方案不合法或没有使你获胜,你在该测试点不得分。

若输出的方案合法且使你获胜,则若你承受的伤害不超过 maxS,你可以得到该测试点 100% 的分数,否则只能得到该测试点 20% 的分数。

校验器

为了方便选手测试,附加文件中我们给出了名为 checker.cpp 的文件,选手可以编译该程序,并使用它校验自己的输出文件。但请注意它与最终评测时所使用的校验器并不完全一致。你也不需要关心其代码的具体内容。

编译命令为:g++ -std=c++11 checker.cpp −o checker。此外,附加文件中有还有名为 testlib.h 的文件,在编译时,请确保该文件与 checker.cpp 在同一子目录下。

在终端中,checker 的使用方式为:checker <输入文件名> <输出文件名> <输出文件名>。如果你的输入文件名为 D.in,输出文件名为 D.out,则正确的使用方式为 checker D.in D.out D.out

若你的方案合法且使你获胜,校验器会给出 ok 并输出你承受的伤害,否则,该校验器会给出简要的错误信息。

数据范围

对于所有数据,2n100,1ai,bi109,0M,maxS,Ai,Bi,Pi,Qi1018,i=1nai109

下载

输入数据与样例评测库下载

请上传你要提交的文件,并命名为 D1.out, D2.out, D3.out, D4.out, D5.out。如果你提交了 zip 压缩包,我们会为你自动解压。


或者通过如下表单上传: