luogu#P10396. 健将青蛙……

    ID: 14351 远端评测题 3000ms 512MiB 尝试: 0 已通过: 0 难度: 7 上传者: 标签>2024洛谷原创提交答案Special JudgeO2优化洛谷月赛

健将青蛙……

题目背景

小青蛙在打破监狱后,注重身体的锻炼。

他成为了一只运动健将

他的故事还在继续……

题目描述

这是一道提交答案题。

你的大脑需要被锻炼。

你是一个 bot。你有一个大小为 300300 的内存条(下标为 13001\sim 300),初始时全为 00。每个内存条中存储着一个 3232 位整数(即 C++ 中的 int)。

你需要构造一个网格图,某些网格上的节点有一个指令,机器人根据指令进行操作和移动。

下文把有指令的节点称作特殊节点。

节点上的指令有如下几种:

  • 增减:将内存条某个位置上的整数增、减 11,并向指定的方向移动一步;
  • 比较:比较内存条中下标为 i,ji,j 的数的大小,并根据大小向指定方向移动一步;
  • 输入:机器人将从这里出发,并向指定方向移动一步,该节点不应被重复经过
  • 输出:机器人到达该节点时结束行动并输出指定位置的值。

其中输入、输出节点必须存在且唯一。

任务:

  1. 在初始内存条下标 1,21,2 位置中读入 a,ba,b,输出 a+ba+b。保证 0a,b1000\leq a,b\leq 100
  2. 在初始内存条下标 11 位置中读入 aa,输出 2a2^a。保证 0a200\leq a\leq 20
  3. 在初始内存条下标 11 位置中读入 aa,输出 a2a^2。保证 1a10001\leq a\leq 1000
  4. 在初始内存条下标 1,21,2 位置中读入 a,ba,b,输出 aba\oplus b。保证 0a,b<2190\leq a,b<2^{19}
  5. 在初始内存条下标 1511\sim 51 位置中读入 n=50,a1,a2,ann=50,a_1,a_2\dotsc,a_n,输出升序排序后的 a1ana_1\sim a_n。保证 0ai1000\leq a_i\leq100
  6. 在初始内存条下标 1591\sim 59 位置中读入 n=30,u1,v1,un1,vn1n=30,u_1,v_1\dotsc,u_{n-1},v_{n-1},表示由 nn 个节点,n1n-1 条边 ui,viu_i,v_i 组成的树,要求输出给定树的直径长度(定义为树上最长的简单路径所包含的边数),保证 1ui,vin1\leq u_i,v_i\leq n

你需要保证机器人从输入节点出发能到达输出节点,并且中途不会访问到非特殊节点,且移动次数 5×107\leq 5\times 10^7

输出格式

本题使用 Special Judge 判定答案正误。

针对题目给定的 66 个任务,你需要分别提交你的输出文件 robot1.out~robot6.out

对于每个文件,你的输出应为以下格式:

第一行输出两个正整数 n,mn,m 表示网格大小为 nnmm 列。你需要保证 n×m107n\times m\leq 10^7

第二行输出一个正整数 kk 表示特殊节点数量。其中 1kn×m1\leq k \leq n \times m

接下来 kk 行每行格式如下:

前两个输出的整数 x,yx,y 表示特殊节点所在位置为第 xx 行第 yy 列,其中 1xn,1ym1\leq x\leq n,1\leq y\leq m,且所有 (x,y)(x,y) 互不相同,接下来按照节点类型输出不同内容:

  • 若为自增节点,则输出 +,自减节点输出 -,并输出一个整数表示自增/自减的内存下标 ii,其中 1i3001\leq i\leq 300,最后输出一个 LRUD 中的字符表示移动方向(分别对应左右上下,下同)。
  • 若为比较节点,则输出 c,接下来两个整数 i,ji,j 表示比较的下标,你需要保证 1i,j3001\leq i,j\leq 300。最后输出两个 LRUD 中的字符分别表示 ii 下标中的数大于 jj 下标中的数时的移动方向和 ii 下标中的数小于等于 jj 下标中的数时的移动方向。
  • 若为输入节点则输出 i,并输出一个 LRUD 中的字符表示移动方向。
  • 若为输出节点则输出 o,并输出一个整数 pp 表示输出大小,接下来 pp互不相同的整数 a1apa_1\sim a_p 表示你要输出的内存条中的下标,你需要保证 1p,ai3001\leq p,a_i\leq 300

你需要保证给出的特殊节点中输入、输出节点必须存在且唯一。


2 3
4
1 1 i R
1 2 c 1 2 R D
1 3 + 2 L
2 2 o 1 2

提示

上述样例给出了一个读入 a,ba,b,输出 max(a,b)\max(a,b) 的程序。


评分方式:若你的输出格式错误或给出结果错误,则获得 00 分。否则对于每个测试点,你的得分与 n×mn\times m 的大小有关。每个测试点有 22 个评分参数 c1,c2c_1,c_2,若你的 n×mc1n\times m\leq c_1 则获得该测试点满分,否则若 c1<n×mc2c_1< n\times m\leq c_2 则获得该测试点 60%60\% 分数,否则获得 40%40\% 的分数。

Task Id c1=c_1 = c2=c_2 = pts
1 66 99 1010
2 99 1212 1515
3 1010
4 3535 4848 2020
5 499499 999999
6 3×1033\times 10^3 3×1053\times 10^5

本题下发 附件.zip 中含有对解题有帮助的文件。

  • ./checker/checker.cpp,其实现与评测时使用的 Special Judge 大致相同,
  • ./toy/index.html 可在浏览器中使用。其为本题的网页版可视化工具,使用方法参见内部的 instruction