AT_kupc2014_g.Darkroom

提高+/省选-

通过率:0%

AC君温馨提醒

该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

本题为交互式题目。也就是说,你需要与评测程序进行一个游戏。

你的程序首先会输入两个整数 NN 和 DD。随后,你需要输出一个长度为 NN 的 0/1 序列。接着,评测程序会将两位小人,京子和结衣,放置在该序列上的某两个位置。设京子的位置为 ii,结衣的位置为 jj。并且,京子和结衣的位置始终相距 DD(即 ∣i−j∣=D|i-j|=D)。你始终可以知道两人当前位置上的字符。

在此条件下,你需要与评测程序进行一个确定京子和结衣位置关系的游戏。你可以向评测程序发送指令,每次可以让京子或结衣向左或向右移动一格。两人的初始位置距离序列两端足够远,因此不需要考虑移动后有人越界的情况。最后,你需要确定两人的位置关系,即 i<ji<j 还是 j<ij<i,并将结果输入给评测程序。位置关系的输入只能进行一次。你最多可以发送 50 次指令(包括移动和最终的关系判断)。

输入格式

首先输入如下格式:

N D

NN 表示你需要输出的 0/1 序列的长度。DD 表示两人初始位置的间隔。

在输入后,你需要输出一个长度为 NN 的 0/1 序列。当你输出完序列后,评测程序会确定两人的初始位置,并返回京子和结衣当前位置上的字符。例如,如果你输出长度为 3 的 0/1 序列 "011",则:

printf("011\n"); fflush(stdout);

接下来,

scanf("%d %d", &a, &b);

变量 aa 和 bb 分别为京子和结衣当前位置上的字符。

之后,你可以让京子或结衣向左或向右移动,每次移动后会返回两人当前位置上的字符。例如,若让京子向右移动:

printf("Move(A,1)\n"); fflush(stdout);

然后,

scanf("%d %d", &a, &b);

aa 和 bb 分别为两人当前位置上的字符。若让结衣向左移动:

printf("Move(B,-1)\n"); fflush(stdout);

然后,

scanf("%d %d", &a, &b);

aa 和 bb 分别为两人当前位置上的字符。

你可以发送的指令有以下 6 种:

  • Move(A,1) — 让京子向右移动一格
  • Move(A,-1) — 让京子向左移动一格
  • Move(B,1) — 让结衣向右移动一格
  • Move(B,-1) — 让结衣向左移动一格
  • i<j — 确定 i<ji<j
  • i>j — 确定 i>ji>j

指令中不得包含空格。

输出格式

无特殊格式要求,详见题目描述。

说明/提示

约束条件

  • 10000≤N≤10000010000 \leq N \leq 100000
  • 1≤D≤N−11 \leq D \leq N-1
  • 所有输入值均为整数。
  • 指令总次数(包括最终关系判断)不得超过 50 次。
  • 两人的初始位置距离序列两端足够远,无需考虑越界。
  • 本题时间限制为 6 秒,其中最多约 2 秒用于评测程序确定初始位置。

评分方式

本题得分根据你在所有测试数据中使用的最大指令次数 CC 计算:

  • 若 C≤5C \leq 5,得 900 分。
  • 若 C>5C > 5,得分为 900/(C−4)900 / (C-4)。

输入输出样例

说明    程序输出      程序输入

输入你需要输出的 0/1 序列长度和两人间隔
10000 100

输出长度为 10000 的 0/1 序列
010101 … 010101

返回京子和结衣当前位置上的字符
0 1

让京子向右移动一格
Move(A,1)

返回京子和结衣当前位置上的字符
1 1

让结衣向左移动一格
Move(B,-1)

返回京子和结衣当前位置上的字符
1 0

确定京子的初始位置在结衣左侧
i<j

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页