CF1155E.Guess the Root

提高+/省选-

通过率:0%

时间限制:2.00s

内存限制:256MB

AC君温馨提醒

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

题目描述

Jury picked a polynomial f(x)=a0+a1⋅x+a2⋅x2+⋯+ak⋅xkf(x) = a_0 + a_1 \cdot x + a_2 \cdot x^2 + \dots + a_k \cdot x^k. k≤10k \le 10 and all aia_i are integer numbers and 0≤ai<106+30 \le a_i \lt 10^6 + 3. It's guaranteed that there is at least one ii such that ai>0a_i \gt 0.

Now jury wants you to find such an integer x0x_0 that f(x0)≡0mod  (106+3)f(x_0) \equiv 0 \mod (10^6 + 3) or report that there is not such x0x_0.

You can ask no more than 5050 queries: you ask value xqx_q and jury tells you value f(xq)mod  (106+3)f(x_q) \mod (10^6 + 3).

Note that printing the answer doesn't count as a query.

Interaction

To ask a question, print "? xqx_q" (0≤xq<106+3)(0 \le x_q \lt 10^6 + 3). The judge will respond with a single integer f(xq)mod  (106+3)f(x_q) \mod (10^6 + 3). If you ever get a result of −1−1 (because you printed an invalid query), exit immediately to avoid getting other verdicts.

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.

When you are ready to answer, print "! x0x_0" where x0x_0 is the answer or −1-1 if there is no such x0x_0.

You can ask at most 5050 questions per test case.

Hack Format

To hack, use the following format.

The only line should contain 1111 integers a0,a1,…,a10a_0, a_1, \dots, a_{10} (0≤ai<106+30 \le a_i \lt 10^6 + 3, max⁡0≤i≤10ai>0\max\limits_{0 \le i \le 10}{a_i} \gt 0) — corresponding coefficients of the polynomial.

评委选定一个多项式 f(x)=a0+a1⋅x+a2⋅x2+⋯+ak⋅xkf(x) = a_0 + a_1 \cdot x + a_2 \cdot x^2 + \dots + a_k \cdot x^k,其中 k≤10k \le 10,所有系数 aia_i 均为整数且满足 0≤ai<106+30 \le a_i \lt 10^6 + 3。保证至少存在一个下标 ii 使得 ai>0a_i \gt 0。

现在,评委要求你找出一个整数 x0x_0,使得 f(x0)≡0mod  (106+3)f(x_0) \equiv 0 \mod (10^6 + 3);若不存在这样的 x0x_0,则需报告无解。

你最多可进行 5050 次询问:每次你给出一个值 xqx_q,评委将返回 f(xq)mod  (106+3)f(x_q) \mod (10^6 + 3)。

注意:输出最终答案不计入询问次数。

交互方式

要提出一个问题,请输出 "? $x_q$"(其中 0≤xq<106+30 \le x_q \lt 10^6 + 3)。评测系统将返回一个整数 f(xq)mod  (106+3)f(x_q) \mod (10^6 + 3)。若你收到结果 −1-1(因输出了非法查询),请立即退出程序,以免获得其他错误提示。

每次输出查询后,务必输出换行符并刷新输出缓冲区;否则将得到 “Idleness limit exceeded” 判定。具体操作如下:

  • C++ 中使用 fflush(stdout) 或 cout.flush();
  • Java 中使用 System.out.flush();
  • Pascal 中使用 flush(output);
  • Python 中使用 stdout.flush();
  • 其他语言请参阅相应文档。

当你准备好回答时,请输出 "! $x_0$",其中 x0x_0 即所求答案;若不存在满足条件的 x0x_0,则输出 -1。

每个测试用例中最多允许 5050 次询问。

Hack 格式

用于 Hack 的输入格式如下:

仅一行,包含 1111 个整数 a0,a1,…,a10a_0, a_1, \dots, a_{10}(满足 0≤ai<106+30 \le a_i \lt 10^6 + 3,且 max⁡0≤i≤10ai>0\max\limits_{0 \le i \le 10}{a_i} \gt 0),表示该多项式的各项系数。

输入输出样例

  • 输入#1

    1000002
    
    0

    输出#1

    ? 0
    
    ? 1
    
    ! 1
  • 输入#2

    5
    
    2
    
    1

    输出#2

    ? 2
    
    ? 1
    
    ? 0
    
    ! -1

说明/提示

The polynomial in the first sample is 1000002+x21000002 + x^2.

The polynomial in the second sample is 1+x21 + x^2.

第一个样例中的多项式为 1000002+x21000002 + x^2。

第二个样例中的多项式为 1+x21 + x^2。

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

首页