这一题是道交互题,平时写的很少,没啥调试经验,GYM上遇到了少说交个十几发。一开始很快的想出了恰烂分的方法,可是没有着急写,果真很快就又把Test Set3的方法想到了,可是想到归想到,调了快一个多小时调不出来,一直拖到告终尾才调好,而后一个常量忘记初始化致使第三个点还RE了,幸亏凭着烂分仍是苟进下一轮了。spa
在一个\(2e9 * 2e9\)的平面中,有一个圆,圆的圆心位于整数点,圆的半径\(R\)是整数且\(10^9/2 \leq R \leq 10^9\)。你每次能够询问一个点,判题器会返回这个点是不是圆心,是否在圆上。用至多300次询问肯定圆心。调试
记\(S = \{(i,j), i,j \in [-5, 5]\}\),圆心一定属于\(S\),枚举就能够了。class
首先若是咱们找到了圆内的一点,咱们就能够用4次二分找到和这个点同行或同列的边界点,即找到了圆的两条“弦”。这里的“弦”并非严格意义上的弦,可是拥有相似的性质,好比能够用两条"弦"肯定圆心,这里为了方便就借过来用用。test
假设圆内一点为\((x,y)\),同行的边界点是\((x,y_1)\)和\((x,y_2)\),同列的边界点是\((x_1,y)\)和\((x_2,y)\),那么圆的圆心为\((\frac{x_1+x_2}{2},\frac{y_1+y_2}{2})\)。搜索
如今就只须要解决找圆内一点的问题了。有两个方法,一个就是直接随机取点,很容易能够获得点落在圆内的几率是\(\frac{\pi}{16}\),这样随机取点指望的次数也不大。还有就是以\(D= 10^9/4\)为间隔的搜索,用反证法很容易能够得出\((i*D, j*D),i,j \in \left[-3, 3\right]\)中至少有1个点落在圆内。方法
由此,问题解决。经验