Entries

スポンサーサイト (この記事を編集する[管理者用])

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://rsujskf.blog32.fc2.com/tb.php/1961-f6386256
この記事にトラックバックする(FC2ブログユーザー)

Beta Round #69 DIV1 B問題/DIV2 D問題 - Falling Anvils (この記事を編集する[管理者用])

Source

Codeforces Beta Round #69 DIV1 B問題 (1000pt)
Codeforces Beta Round #69 DIV2 D問題 (2000pt)
Problem description
Beta Round #69 DIV1の自分の参加記録

問題概要

非負整数a, bが与えられる.
実数pが[0,a]の一様分布,qが[-b,b]の一様分布に従うとき
 x^2 + sqrt(p) * x + q = 0
が少なくても1つ実数解を持つ確率を求める問題.

解法

判別式p-4qが正になる確率を求めれば良い.
長方形(0,-b)-(a,b)のp-4qが正の部分の面積の割合と考えると分かりやすい.
p-4qの線分が長方形のどこの辺を通るかで場合分けが必要.
aやbが0の時は例外処理が必要で気をつける.

C言語のスパゲッティなコード
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define REP(i,a,b) for(i=a;i<b;i++)
#define rep(i,n) REP(i,0,n)

#define EPS 1e-10
#define MIN(a,b) (((a)<(b))?(a):(b))

int main(){
  double a,b,res;
  double m1, m2;
  int size;

  scanf("%d",&size);
  while(size--){
    scanf("%lf%lf",&a,&b);
    if(b<EPS){ puts("1.0000000000"); continue; }
    if(a<EPS){ puts("0.5000000000"); continue; }
    
    res = 0;

    if(a > 4*b) m1 = 4*b, m2 = a-m1;
    else        m1 = a,   m2 = 0;

    res += m2 / a;
    res += 0.5 * m1 / a / 2;
    res += MIN(1.0,(4*b+a)/(8*b)) * m1 / a / 2;
    
    printf("%.10lf\n",res);
  }


  return 0;
}

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://rsujskf.blog32.fc2.com/tb.php/1961-f6386256
この記事にトラックバックする(FC2ブログユーザー)

Appendix

Recent Articles

ブログ内検索

Ads


(プライバシーポリシー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。