提出 #35595508


ソースコード 拡げる

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i,a,n) for (ll i=a;i<(ll)n;i++)
ll read(){ll r;scanf("%lld",&r);return r;}
vector<tuple<int,int,int> > abc;
const double PI=acos(-1);

double xy2theta(double x,double y){ // (x,y) -> theta
  if(x>=0 && y>=0) return atan(y/x);
  if(x<0 && y>=0) return PI/2+atan(-x/y);
  if(x<0 && y<0) return PI+atan(y/x);
  return 3*PI/2+atan(-x/y);
}

pair<double,double> solve(double A,double B,double C){ // Ax^2+Bx+C=0
  return {(-B+sqrt(abs(B*B-4*A*C)))/(2*A),(-B-sqrt(abs(B*B-4*A*C)))/(2*A)};
}

ll cross(const vector<pair<int,int>>&ij){ // 线段相交数
  vector<int>fen(ij.size()*2);//fenwick
  auto query=[&](int x){
    int r=0;
    for(int i=x+1;i;i-=(i&-i)) r+=fen[i-1];
    return r;
  };
  auto add=[&](int x){
    for(int i=x+1;i<=(int)fen.size();i+=(i&-i)) fen[i-1]++;
  };

  ll r=0;
  for(auto [i,j]:ij){
    r+=query(j-1)-query(i); // pi < i < pj < j, 查询 [i+1,j-1]
    add(j);
  }
  return r;
}

int f(double radius){
  vector<pair<double,double>> lr;
  for(auto [a,b,c]:abc)if(abs(c)/sqrt(a*a+b*b) < radius){
    double x0,y0,x1,y1;
    if(a != 0){
      tie(y0,y1) = solve(a*a+b*b,2*b*c,c*c-a*a*radius*radius);
      x0 = -(b*y0+c)/a;
      x1 = -(b*y1+c)/a;
    }else{
      tie(x0,x1) = solve(a*a+b*b,2*a*c,c*c-b*b*radius*radius);
      y0 = -(a*x0+c)/b;
      y1 = -(a*x1+c)/b;
    }
    auto l = xy2theta(x0,y0);
    auto r = xy2theta(x1,y1);
    if(l>r)swap(l,r);
    lr.push_back({l,r});
  }
  vector<double> p;
  for(auto[l,r]:lr){
    p.push_back(l);
    p.push_back(r);
  }
  sort(begin(p),end(p));
  vector<pair<int,int> >ij;
  for(auto [l,r]:lr)ij.push_back({
      lower_bound(begin(p),end(p),l)-begin(p),
      lower_bound(begin(p),end(p),r)-begin(p)
  });
  sort(begin(ij),end(ij));
  return cross(ij);
}

int main(){
  int n = read();
  int k = read();
  rep(i,0,n)abc.push_back({read(),read(),read()});

  double l = 0;
  double r = 4e6;
  while(r-l>1e-6){
    double mid=(l+r)/2;
    (f(mid)<k?l:r)=mid;
  }
  printf("%.15lf\n",l);
  return 0;
}

提出情報

提出日時
問題 Ex - Intersection 2
ユーザ cromarmot
言語 C++ (GCC 9.2.1)
得点 600
コード長 2054 Byte
結果 AC
実行時間 1075 ms
メモリ 6956 KiB

コンパイルエラー

./Main.cpp: In function ‘ll read()’:
./Main.cpp:5:21: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
    5 | ll read(){ll r;scanf("%lld",&r);return r;}
      |                ~~~~~^~~~~~~~~~~

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 600 / 600
結果
AC × 2
AC × 52
セット名 テストケース
Sample example_00.txt, example_01.txt
All example_00.txt, example_01.txt, test_00.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt, test_44.txt, test_45.txt, test_46.txt, test_47.txt, test_48.txt, test_49.txt
ケース名 結果 実行時間 メモリ
example_00.txt AC 7 ms 4072 KiB
example_01.txt AC 2 ms 4124 KiB
test_00.txt AC 874 ms 6404 KiB
test_01.txt AC 49 ms 4212 KiB
test_02.txt AC 243 ms 4268 KiB
test_03.txt AC 246 ms 4412 KiB
test_04.txt AC 471 ms 5436 KiB
test_05.txt AC 706 ms 6532 KiB
test_06.txt AC 588 ms 5408 KiB
test_07.txt AC 52 ms 4236 KiB
test_08.txt AC 261 ms 4572 KiB
test_09.txt AC 203 ms 4328 KiB
test_10.txt AC 2 ms 4008 KiB
test_11.txt AC 2 ms 3940 KiB
test_12.txt AC 2 ms 4000 KiB
test_13.txt AC 2 ms 4104 KiB
test_14.txt AC 2 ms 3948 KiB
test_15.txt AC 5 ms 3944 KiB
test_16.txt AC 2 ms 4180 KiB
test_17.txt AC 2 ms 4064 KiB
test_18.txt AC 2 ms 4048 KiB
test_19.txt AC 2 ms 4076 KiB
test_20.txt AC 1075 ms 6704 KiB
test_21.txt AC 673 ms 6808 KiB
test_22.txt AC 1073 ms 6808 KiB
test_23.txt AC 1029 ms 6752 KiB
test_24.txt AC 1012 ms 6704 KiB
test_25.txt AC 1051 ms 6800 KiB
test_26.txt AC 1055 ms 6696 KiB
test_27.txt AC 1053 ms 6696 KiB
test_28.txt AC 1046 ms 6752 KiB
test_29.txt AC 1050 ms 6840 KiB
test_30.txt AC 587 ms 6956 KiB
test_31.txt AC 587 ms 6848 KiB
test_32.txt AC 586 ms 6852 KiB
test_33.txt AC 75 ms 4120 KiB
test_34.txt AC 601 ms 5512 KiB
test_35.txt AC 234 ms 4476 KiB
test_36.txt AC 342 ms 5056 KiB
test_37.txt AC 165 ms 4312 KiB
test_38.txt AC 816 ms 6424 KiB
test_39.txt AC 913 ms 6368 KiB
test_40.txt AC 246 ms 4676 KiB
test_41.txt AC 884 ms 6548 KiB
test_42.txt AC 1051 ms 6748 KiB
test_43.txt AC 1055 ms 6812 KiB
test_44.txt AC 1053 ms 6948 KiB
test_45.txt AC 2 ms 3864 KiB
test_46.txt AC 2 ms 3996 KiB
test_47.txt AC 2 ms 4012 KiB
test_48.txt AC 2 ms 3860 KiB
test_49.txt AC 2 ms 3996 KiB