CF1179E.Alesya and Discrete Math
普及/提高-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
We call a function good if its domain of definition is some set of integers and if in case it's defined in x and x−1 , f(x)=f(x−1)+1 or f(x)=f(x−1) .
Tanya has found n good functions f1,…,fn , which are defined on all integers from 0 to 1018 and fi(0)=0 and fi(1018)=L for all i from 1 to n . It's an notorious coincidence that n is a divisor of L .
She suggests Alesya a game. Using one question Alesya can ask Tanya a value of any single function in any single point. To win Alesya must choose integers li and ri ( 0≤li≤ri≤1018 ), such that fi(ri)−fi(li)≥nL (here fi(x) means the value of i -th function at point x ) for all i such that 1≤i≤n so that for any pair of two functions their segments [li,ri] don't intersect (but may have one common point).
Unfortunately, Tanya doesn't allow to make more than 2⋅105 questions. Help Alesya to win!
It can be proved that it's always possible to choose [li,ri] which satisfy the conditions described above.
It's guaranteed, that Tanya doesn't change functions during the game, i.e. interactor is not adaptive
输入格式
The first line contains two integers n and L ( 1≤n≤1000 , 1≤L≤1018 , n is a divisor of L ) — number of functions and their value in 1018 .
输出格式
When you've found needed li,ri , print "!" without quotes on a separate line and then n lines, i -th from them should contain two integers li , ri divided by space.
Interaction
To ask fi(x) , print symbol "?" without quotes and then two integers i and x ( 1≤i≤n , 0≤x≤1018 ). Note, you must flush your output to get a response.
After that, you should read an integer which is a value of i -th function in point x .
You're allowed not more than 2⋅105 questions.
To flush you can use (just after printing an integer and end-of-line):
- fflush(stdout) in C++;
- System.out.flush() in Java;
- stdout.flush() in Python;
- flush(output) in Pascal;
- See the documentation for other languages.
Hacks:
Only tests where 1≤L≤2000 are allowed for hacks, for a hack set a test using following format:
The first line should contain two integers n and L ( 1≤n≤1000 , 1≤L≤2000 , n is a divisor of L ) — number of functions and their value in 1018 .
Each of n following lines should contain L numbers l1 , l2 , ... , lL ( 0≤lj<1018 for all 1≤j≤L and lj<lj+1 for all 1<j≤L ), in i -th of them lj means that fi(lj)<fi(lj+1) .
输入输出样例
输入#1
5 5 ? 1 0 ? 1 1 ? 2 1 ? 2 2 ? 3 2 ? 3 3 ? 4 3 ? 4 4 ? 5 4 ? 5 5 ! 0 1 1 2 2 3 3 4 4 5
输出#1
0 1 1 2 2 3 3 4 4 4 5
说明/提示
In the example Tanya has 5 same functions where f(0)=0 , f(1)=1 , f(2)=2 , f(3)=3 , f(4)=4 and all remaining points have value 5 .
Alesya must choose two integers for all functions so that difference of values of a function in its points is not less than nL (what is 1 here) and length of intersection of segments is zero.
One possible way is to choose pairs [0 , 1] , [1 , 2] , [2 , 3] , [3 , 4] and [4 , 5] for functions 1 , 2 , 3 , 4 and 5 respectively.