AT_kupc2014_g.Darkroom
提高+/省选-
通过率:0%
AC君温馨提醒
该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
本题为交互式题目。也就是说,你需要与评测程序进行一个游戏。
你的程序首先会输入两个整数 N 和 D。随后,你需要输出一个长度为 N 的 0/1 序列。接着,评测程序会将两位小人,京子和结衣,放置在该序列上的某两个位置。设京子的位置为 i,结衣的位置为 j。并且,京子和结衣的位置始终相距 D(即 ∣i−j∣=D)。你始终可以知道两人当前位置上的字符。
在此条件下,你需要与评测程序进行一个确定京子和结衣位置关系的游戏。你可以向评测程序发送指令,每次可以让京子或结衣向左或向右移动一格。两人的初始位置距离序列两端足够远,因此不需要考虑移动后有人越界的情况。最后,你需要确定两人的位置关系,即 i<j 还是 j<i,并将结果输入给评测程序。位置关系的输入只能进行一次。你最多可以发送 50 次指令(包括移动和最终的关系判断)。
输入格式
首先输入如下格式:
N D
N 表示你需要输出的 0/1 序列的长度。D 表示两人初始位置的间隔。
在输入后,你需要输出一个长度为 N 的 0/1 序列。当你输出完序列后,评测程序会确定两人的初始位置,并返回京子和结衣当前位置上的字符。例如,如果你输出长度为 3 的 0/1 序列 "011",则:
printf("011\n"); fflush(stdout);
接下来,
scanf("%d %d", &a, &b);
变量 a 和 b 分别为京子和结衣当前位置上的字符。
之后,你可以让京子或结衣向左或向右移动,每次移动后会返回两人当前位置上的字符。例如,若让京子向右移动:
printf("Move(A,1)\n"); fflush(stdout);
然后,
scanf("%d %d", &a, &b);
a 和 b 分别为两人当前位置上的字符。若让结衣向左移动:
printf("Move(B,-1)\n"); fflush(stdout);
然后,
scanf("%d %d", &a, &b);
a 和 b 分别为两人当前位置上的字符。
你可以发送的指令有以下 6 种:
Move(A,1)— 让京子向右移动一格Move(A,-1)— 让京子向左移动一格Move(B,1)— 让结衣向右移动一格Move(B,-1)— 让结衣向左移动一格i<j— 确定 i<ji>j— 确定 i>j
指令中不得包含空格。
输出格式
无特殊格式要求,详见题目描述。
说明/提示
约束条件
- 10000≤N≤100000
- 1≤D≤N−1
- 所有输入值均为整数。
- 指令总次数(包括最终关系判断)不得超过 50 次。
- 两人的初始位置距离序列两端足够远,无需考虑越界。
- 本题时间限制为 6 秒,其中最多约 2 秒用于评测程序确定初始位置。
评分方式
本题得分根据你在所有测试数据中使用的最大指令次数 C 计算:
- 若 C≤5,得 900 分。
- 若 C>5,得分为 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测评打分。不知道怎么写?