静かで孤独な日記

のんびりたまに

ABC026-D 高橋君ボール1号

using namespace std;
//const ll MOD=(ll)1e9+7;
//const ll inf=(ll)1e14;
const int dy[]={1,0,-1};
const int dx[]={1,0,-1};
const double eps=1e-10;
int n,m,h,w;
string s;
double a,b,c;
const double PI=acos(-1.0);

bool check(double mid){
  double f_t=a*mid+b*sin(c*mid*PI);
  if(f_t>100+eps){
    return 1;
  }else return 0;
}

int main(){
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.precision(10);
  cout<<fixed;
#ifdef LOCAL_DEFINE
  FILE *stream1;
  //FILE *stream2;
  stream1=freopen("in","r",stdin);
  //stream2=freopen("out","w",stdout);
  if(stream1==NULL)return 0;
  //if(stream2==NULL)return 0;
#endif
  cin>>a>>b>>c;
  double l=0,r;
  for(int i=1;;i++){
    if(a*(double)i+b*sin(c*(double)i*PI)>100+eps){
      r=i;
      l=i-1;
      break;
    }
  }
  for(int i=0;i<100;i++){
    double mid=(l+r)/2;
    if(check(mid)){
      r=mid;
    }else{
      l=mid;
    }
  }
  print(l);
#ifdef LOCAL_DEFINE
  cerr<<"Time elapsed: "<<1.0*clock()/CLOCKS_PER_SEC<<"s.\n";
  fclose(stream1);
  //fclose(stream2);
#endif
  return 0;
}
  • こんなのも二分探索でいけるんですね。