chacoderのブログ

競技プログラミングそのほか

ABC026-D 高橋君ボール1号

ABC026-D 高橋君ボール1号

atcoder.jp

考察

いかにも二分探索の問題です。解が複数あるケースもあるということで単純増加でないようですが,二分探索で解けそうです。

double型を使い、円周率は少数点以下14桁まで使いました。10桁目までだと誤差でWAしました。

水difですが今だと緑difもないかも知れません。

ACしたコード

#include <bits/stdc++.h>
using namespace std;
int A,B,C;
double func(double x){
  double ans=A*x+B*sin(C*x*3.14159265358979);
  return ans;
}

int main(){
  cin>>A>>B>>C;
  double r=0;
  double l=1000000;
  int cnt=0;
  while(l-r != 0 && cnt<100000){
    cnt++;
    double x=(l+r)/2;
    if(func(x)==100){
      cout<<x<<endl;
      return 0;
    }
    if(func(x)<100){
      r=x;
    }
    else{
      l=x;
    }
  }
  cout<<setprecision(18)<<l<<endl;
  return 0;
}