fork download
  1. #pragma GCC optimize("Ofast")
  2. #pragma GCC optimize("unroll-loops")
  3. #pragma GCC optimize("inline")
  4. #include<bits/stdc++.h>
  5. using namespace std;
  6. inline int my_getchar(){
  7. return getchar();
  8. }
  9. inline void rd(int &x){
  10. int k;
  11. int m=0;
  12. x=0;
  13. for(;;){
  14. k = my_getchar();
  15. if(k=='-'){
  16. m=1;
  17. break;
  18. }
  19. if('0'<=k&&k<='9'){
  20. x=k-'0';
  21. break;
  22. }
  23. }
  24. for(;;){
  25. k = my_getchar();
  26. if(k<'0'||k>'9'){
  27. break;
  28. }
  29. x=x*10+k-'0';
  30. }
  31. if(m){
  32. x=-x;
  33. }
  34. }
  35. inline void rd(long long &x){
  36. int k;
  37. int m=0;
  38. x=0;
  39. for(;;){
  40. k = my_getchar();
  41. if(k=='-'){
  42. m=1;
  43. break;
  44. }
  45. if('0'<=k&&k<='9'){
  46. x=k-'0';
  47. break;
  48. }
  49. }
  50. for(;;){
  51. k = my_getchar();
  52. if(k<'0'||k>'9'){
  53. break;
  54. }
  55. x=x*10+k-'0';
  56. }
  57. if(m){
  58. x=-x;
  59. }
  60. }
  61. inline int rd_int(void){
  62. int x;
  63. rd(x);
  64. return x;
  65. }
  66. inline void my_putchar(const int k){
  67. putchar(k);
  68. if(k=='\n'){
  69. fflush(stdout);
  70. }
  71. }
  72. inline void wt_L(char a){
  73. my_putchar(a);
  74. }
  75. inline void wt_L(long long x){
  76. int s=0;
  77. int m=0;
  78. char f[20];
  79. if(x<0){
  80. m=1;
  81. x=-x;
  82. }
  83. while(x){
  84. f[s++]=x%10;
  85. x/=10;
  86. }
  87. if(!s){
  88. f[s++]=0;
  89. }
  90. if(m){
  91. my_putchar('-');
  92. }
  93. while(s--){
  94. my_putchar(f[s]+'0');
  95. }
  96. }
  97. inline void wt_L(const char c[]){
  98. int i=0;
  99. for(i=0;c[i]!='\0';i++){
  100. my_putchar(c[i]);
  101. }
  102. }
  103. template<class S, class T> inline S divup_L(S a, T b){
  104. return (a+b-1)/b;
  105. }
  106. long long X;
  107. long long Y;
  108. long long A;
  109. long long B;
  110. int q(long long i){
  111. wt_L("?");
  112. wt_L(' ');
  113. wt_L(i+1);
  114. wt_L('\n');
  115. return rd_int();
  116. }
  117. int main(){
  118. long long N;
  119. rd(N);
  120. long long fc;
  121. long long sc;
  122. long long f;
  123. f = q(0);
  124. fc = 1;
  125. while(q(fc) == f){
  126. fc *= 2;
  127. }
  128. long long Q5VJL1cS;
  129. long long e98WHCEY;
  130. long long cTE1_r3A;
  131. Q5VJL1cS = 1;
  132. e98WHCEY = fc;
  133. while(Q5VJL1cS < e98WHCEY){
  134. if((Q5VJL1cS + e98WHCEY)%2==0){
  135. cTE1_r3A = (Q5VJL1cS + e98WHCEY) / 2;
  136. }
  137. else{
  138. cTE1_r3A = (Q5VJL1cS + e98WHCEY - 1) / 2;
  139. }
  140. if(q(cTE1_r3A) != f){
  141. e98WHCEY = cTE1_r3A;
  142. }
  143. else{
  144. Q5VJL1cS = cTE1_r3A + 1;
  145. }
  146. }
  147. fc =e98WHCEY;
  148. sc = fc;
  149. while(q(fc+sc) != f){
  150. sc *= 2;
  151. }
  152. long long t_ynMSdg;
  153. long long KrdatlYV;
  154. long long ao_dF3pO;
  155. t_ynMSdg = 1;
  156. KrdatlYV = sc;
  157. while(t_ynMSdg < KrdatlYV){
  158. if((t_ynMSdg + KrdatlYV)%2==0){
  159. ao_dF3pO = (t_ynMSdg + KrdatlYV) / 2;
  160. }
  161. else{
  162. ao_dF3pO = (t_ynMSdg + KrdatlYV - 1) / 2;
  163. }
  164. if(q(fc+ao_dF3pO) == f){
  165. KrdatlYV = ao_dF3pO;
  166. }
  167. else{
  168. t_ynMSdg = ao_dF3pO + 1;
  169. }
  170. }
  171. sc =KrdatlYV;
  172. X = sc;
  173. A = (f+1) * X - fc;
  174. Y =(divup_L((N + A),(2*X)));
  175. B = (2*X*Y - N - A);
  176. wt_L("!");
  177. wt_L(' ');
  178. wt_L(X);
  179. wt_L(' ');
  180. wt_L(Y);
  181. wt_L(' ');
  182. wt_L(A);
  183. wt_L(' ');
  184. wt_L(B);
  185. wt_L('\n');
  186. return 0;
  187. }
  188. // cLay version 20210904-1
  189.  
  190. // --- original code ---
  191. // //interactive
  192. // ll X, Y, A, B;
  193. //
  194. // int q(ll i){
  195. // wt("?", i+1);
  196. // return rd_int();
  197. // }
  198. //
  199. // {
  200. // ll @N, fc, sc, f;
  201. //
  202. // f = q(0);
  203. // fc = 1;
  204. // while(q(fc) == f) fc *= 2;
  205. // fc = bsearch_min[ll,x,1,fc](q(x) != f);
  206. //
  207. // sc = fc;
  208. // while(q(fc+sc) != f) sc *= 2;
  209. // sc = bsearch_min[ll,x,1,sc](q(fc+x) == f);
  210. //
  211. // X = sc;
  212. // A = (f+1) * X - fc;
  213. // Y = (N + A) /+ (2*X);
  214. // B = (2*X*Y - N - A);
  215. // wt("!", X, Y, A, B);
  216. // }
  217.  
Time limit exceeded #stdin #stdout 5s 5524KB
stdin
Standard input is empty
stdout
Standard output is empty