CF1479A.Searching Local Minimum
普及+/提高
通过率:0%
时间限制:2.00s
内存限制:512MB
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
This is an interactive problem.
Homer likes arrays a lot and he wants to play a game with you.
Homer has hidden from you a permutation a1,a2,…,an of integers 1 to n. You are asked to find any index k (1≤k≤n) which is a local minimum.
For an array a1,a2,…,an, an index i (1≤i≤n) is said to be a local minimum if ai<minai−1,ai+1, where a0=an+1=+∞. An array is said to be a permutation of integers 1 to n, if it contains all integers from 1 to n exactly once.
Initially, you are only given the value of n without any other information about this permutation.
At each interactive step, you are allowed to choose any i (1≤i≤n) and make a query with it. As a response, you will be given the value of ai.
You are asked to find any index k which is a local minimum after at most 100 queries.
Interaction
You begin the interaction by reading an integer n (1≤n≤105) on a separate line.
To make a query on index i (1≤i≤n), you should output "? i" in a separate line. Then read the value of ai in a separate line. The number of the "?" queries is limited within 100.
When you find an index k (1≤k≤n) which is a local minimum, output "! k" in a separate line and terminate your program.
In case your query format is invalid, or you have made more than 100 "?" queries, you will receive Wrong Answer verdict.
After printing a query do not forget to output end of line and flush the output. Otherwise, you will get Idleness limit exceeded. To do this, use:
- fflush(stdout) or cout.flush() in C++;
- System.out.flush() in Java;
- flush(output) in Pascal;
- stdout.flush() in Python;
- see documentation for other languages.
Hack Format
The first line of the hack should contain a single integer n (1≤n≤105).
The second line should contain n distinct integers a1,a2,…,an (1≤ai≤n).
这是一个交互式问题。
霍默非常喜欢数组,他想和你玩一个游戏。
霍默向你隐藏了一个由整数 1 到 n 构成的排列 a1,a2,…,an。你需要找出任意一个下标 k(1≤k≤n),使得该下标对应的位置是一个局部最小值。
对于数组 a1,a2,…,an,若下标 i(1≤i≤n)满足 ai<min{ai−1,ai+1},则称其为一个局部最小值,其中定义 a0=an+1=+∞。若一个数组恰好包含 1 到 n 的每个整数各一次,则称其为整数 1 到 n 的一个排列。
初始时,你仅被给出 n 的值,关于该排列的其他任何信息均不可知。
在每次交互步骤中,你可以任选一个下标 i(1≤i≤n)并发起一次查询;作为回应,你将获得 ai 的值。
你需在至多 100 次查询内,找出任意一个满足条件的局部最小值下标 k。
交互方式
首先,你在单独一行读入一个整数 n(1≤n≤105)。
要对下标 i(1≤i≤n)发起查询,请在单独一行输出 ? $i$,然后在单独一行读入 ai 的值。? 类查询的总数不得超过 100 次。
当你找到一个下标 k(1≤k≤n)使得其为局部最小值时,请在单独一行输出 ! $k$ 并终止程序。
若你的查询格式非法,或 ? 类查询次数超过 100 次,你将收到“Wrong Answer”判据。
每次输出查询后,请务必输出换行符并刷新输出缓冲区,否则你会收到 “Idleness limit exceeded”。为此,请使用:
- C++ 中:
fflush(stdout)或cout.flush(); - Java 中:
System.out.flush(); - Pascal 中:
flush(output); - Python 中:
stdout.flush(); - 其他语言请查阅相应文档。
Hack 格式
Hack 输入的第一行应包含一个整数 n(1≤n≤105)。
第二行应包含 n 个互不相同的整数 a1,a2,…,an(1≤ai≤n)。
输入输出样例
输入#1
5 3 2 1 4 5
输出#1
? 1 ? 2 ? 3 ? 4 ? 5 ! 3
说明/提示
In the example, the first line contains an integer 5 indicating that the length of the array is n=5.
The example makes five "?" queries, after which we conclude that the array is a=[3,2,1,4,5] and k=3 is local minimum.
在示例中,第一行包含一个整数 5,表示数组长度为 n=5。
该示例进行了五次 "?" 查询,之后我们得出结论:数组为 a=[3,2,1,4,5],且 k=3 是一个局部最小值。
输入解题思路,AI测评打分。不知道怎么写?