CF2087D.Uppercase or Lowercase?

通过率:0%

AC君温馨提醒

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

题目描述

这是一个交互题。

在某个数据库中,存储着 nn 个 handle,形式为一个编号列表。你对其中某个特定的 handle hh 感兴趣,或者更准确地说,你想知道它在列表中的位置。

你可以向数据库询问列表中的第 ii 个位置,数据库会返回该位置上的 handle。

所有 handle 都是非空字符串,由不超过 2020 个小写拉丁字母组成,除了第一个字母可以是小写或大写拉丁字母。

你已知所有 handle 都按字典序排序,但问题在于你不知道大写字母是否被认为比小写字母小。换句话说,你不知道是所有以大写字母开头的 handle 排在前面,后面是以小写字母开头的,还是相反,即所有以小写字母开头的 handle 排在前面,后面是以大写字母开头的。

字典序是标准的字符串比较顺序,正式定义如下:

  • 如果字符串 ss 和 tt 在某些位置不同,最早不同的位置为 ii,那么当且仅当 si<tis_i < t_i 时,字符串 ss 在字典序上排在 tt 前面(例如,对于字符串 cats 和 current,最早不同的位置是第 22 位,字符 a 小于字符 u,所以 cats 在字典序上小于 current);
  • 如果字符串 ss 和 tt 没有不同字符的位置,则较短的字符串排在前面。例如,字符串 cat 排在字符串 cats 前面。

由于对数据库的访问受限,你最多只能向数据库询问 1010 次。已知你感兴趣的 handle 一定在列表中,请确定它在列表中的位置。

输入格式

第一行包含整数 nn 和字符串 hh(1≤n≤5001 \le n \le 500)——列表中 handle 的总数以及你要查找的 handle。

保证所有 handle 都是非空字符串,长度不超过 2020,只包含小写拉丁字母,除了第一个字母可以是大写字母。

保证所有 handle 已排序、互不相同,且给定的 handle 一定在列表中。

输出格式

每次询问,输出如下格式的字符串(不含引号):

  • "? i"(1≤i≤n1 \le i \le n)

评测器会返回一个字符串 ss,即列表中第 ii 个位置上的 handle。

当你准备好输出答案时,输出如下格式的字符串(不含引号):

  • "! i"(1≤i≤n1 \le i \le n)

并终止程序。输出答案不计入查询次数。

交互器是非自适应的,也就是说,每个测试的 handle 列表在测试开始前就已固定。

如果你的程序询问次数超过 1010 次(不包括输出答案)或查询格式不正确,评测器会返回字符串 "-1"。此时你的程序应立即终止,以获得 Wrong Answer 判定。否则,你的解答会继续从已关闭的流中读取,可能会收到任意判定。

每次输出查询后,不要忘记输出换行并刷新输出流。否则,你可能会收到 Idleness limit exceeded 判定。为此,请使用 System.out.flush()。

输入输出样例

  • 输入#1

    4 adedalic
    
    Bleddest
    
    Neon
    
    adedalic
    
    awoo

    输出#1

    ? 1
    
    ? 2
    
    ? 3
    
    ? 4
    
    ! 3
  • 输入#2

    6 tourist
    
    jiangly
    
    tourist
    
    Radewoosh

    输出#2

    ? 1
    
    ? 3
    
    ? 6
    
    ! 3

说明/提示

注意,示例中的空格仅为增强可读性。实际评测时,交互器不会输出任何空行。

由 ChatGPT 4.1 翻译

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

首页