Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C+中的二进制搜索+;Codejam Round1A问题的解决_C_Binary Search - Fatal编程技术网

C+中的二进制搜索+;Codejam Round1A问题的解决

C+中的二进制搜索+;Codejam Round1A问题的解决,c,binary-search,C,Binary Search,我认为竞赛分析中的代码片段不正确,而(right-left>=1)可能会陷入无限循环。因此我使用>而不是>=。但它没有给出正确的答案 但是,代码传递断言,这意味着左是结果,右是边界。。我认为我的代码做了正确的事情,但是 这是我的密码: #define _USE_MATH_DEFINES #include<cstdio> #include<cassert> #include<cmath> int main() { int cases; scanf("%d

我认为竞赛分析中的代码片段不正确,而(right-left>=1)可能会陷入无限循环。因此我使用>而不是>=。但它没有给出正确的答案

但是,代码传递断言,这意味着左是结果,右是边界。。我认为我的代码做了正确的事情,但是

这是我的密码:

#define _USE_MATH_DEFINES

#include<cstdio>
#include<cassert>
#include<cmath>

int main()
{
  int cases; scanf("%d", &cases);
  for(int c=1;c<=cases;c++) {
    double r, t;
    //long long t;
    scanf("%lf %lf", &r, &t);
    long long maxn = (long long)((sqrt((2*r-1)*(2*r-1)+8*t)-2*r+1)/4)+1;
    long long left=0, right=1;
    long long re= (long long)t;
    while ((2*r-1)*right+right*right*2 <= t) {
      left = right; right *= 2;
    }
    //printf("%lld\n",maxn);
    while(left+1<right) {
      long long m = left + (right - left)/2;
      double tt = (2*r-1)*1.0*m+2*m*m;
      if (tt<=t)
        left=m;
      else
        right=m;
    }
    assert((2*r-1)*1.0*right+2*right*right>t);
    assert((2*r-1)*1.0*left+2*left*left<=t);
    printf("Case #%d: %lld\n", c, left); 
  }
  return 0;
}
定义使用数学定义
#包括
#包括
#包括
int main()
{
int cases;scanf(“%d”和cases);

对于(int c=1;c很可能,
double tt=(2*r-1)*1.0*m+2*m*m;
正在失去精度。
double
只有大约52位整数精度。

那么,你的问题是什么?我在你的帖子中没有看到任何问题。抱歉..我无法找出为什么我的代码不能在大输入下工作