这是一道交互题。
SEU最菜的 dd 有一个分段函数:
f(x)=⎩⎨⎧kx+bka+bk(x−1)+bn≤x≤aa<x<a+1a+1≤x≤m其中 k,a,b均为未知数。
他需要你猜测出k和a的值,不过,他也不会为难你,你可以问他一些问题后再猜。
在每组数据中,你最多可以询问31次,询问方式如下:
? x1 x2 :他会告诉你 f(x2)−f(x1) 的值,其中你需要保证 n≤x1≤x2≤m。当你确定答案后,你可以以如下方式给出答案:
! k a :即分别给出k和a的值。打印查询后,不要忘记输出行尾并刷新输出。否则,您将得到超出时间限制。要做到这一点,请使用:
fflush(stdout) 或 cout.flush() ;System.out.flush() ;flush(output) ;stdout.flush() ;第一行,一个整数t(1≤t≤103),代表数据组数。
对于每组数据:
输入仅有两个数字n,m 代表函数的定义域。
保证0≤n<m≤109 且 2≤m−n≤109 , k,a均为正整数且 1≤k≤106 , n≤a<m。
保证 n,m为非负整数。
对于每组数据,按照交互方式输入输出即可。
输入样例:
1
1 4
1
0
输出样例:
? 1 3
? 2 2
! 1 2
样例解释: dd 的分段函数为:
f(x)=⎩⎨⎧x−1145142−114514x−1145151≤x≤22<x<33≤x≤4所以 k=1,a=2 。
如果你的询问次数超过31次或者输出不合法或者答案错误,会被判做 Partilly Correct 或 Time Limit Exceeded 。
输入输出样例仅能代表本题的交互方式,与本题目的做法没有任何关联。