寝癖頭の解法

学習中の覚え書きを投稿、更新していきます。

アルゴ式(beta版): C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(8) 確率

アルゴ式(beta版)の「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(8) 確率からの出典です。
algo-method.com
アルゴ式とは...
>・プログラミングや情報科学をコツコツ学べる「教科書」
>・学んだ内容をゲーム感覚で大量に実践できる「練習問題」
>の2つで構成される、Web上で完結した学習コンテンツです。

C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(8) 確率

僕が作成、提出したコードは、以下のとおりです。

くじ引き (1)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(8) 確率
くじ引き (1)
https://algo-method.com/tasks/759
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    double n;
    cin>>n;
    double ans=1/n;
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
2つのサイコロ (3)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(8) 確率
2つのサイコロ (3)
https://algo-method.com/tasks/760
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
	int x;
	cin>>x;
	double cnt=0.0;
	for(int i=0;i<6;i++){
		for(int j=0;j<6;j++){
			int sum=(i+1)+(j+1);
			if(x==sum){
				cnt+=1.0;
			}
		}
	}
	double ans=cnt/36.0;
	cout<<fixed<<setprecision(10)<<ans<<endl;
	return 0;
}
くじ引き (2)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(8) 確率
くじ引き (2)
https://algo-method.com/tasks/762
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    double n,m;
    cin>>n>>m;
    double ans=m/n;
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
変わったサイコロ (1)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(8) 確率
変わったサイコロ (1)
https://algo-method.com/tasks/763
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n,x;
    cin>>n>>x;
    vector<double> p(n+1);
    for(int i=1;i<=n;i++){
        cin>>p[i];
    }
    double ans=0.0;
    for(int i=1;i<=n;i++){
        if(i%x==0){
            ans+=p[i]/100;
        }
    }
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
変わったサイコロ (2)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(8) 確率
変わったサイコロ (2)
https://algo-method.com/tasks/768
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n,m;
    cin>>n>>m;
    vector<double> p(n+1);
    vector<int> d(m);
    for(int i=1;i<=n;i++){
        cin>>p[i];
    }
    for(int i=0;i<m;i++){
        cin>>d[i];
    }
    double ans=1.0;
    for(int i=0;i<m;i++){
        ans*=p[d[i]]/100;
    }
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
変わったサイコロ (3)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(8) 確率
変わったサイコロ (3)
https://algo-method.com/tasks/761
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n,x;
    cin>>n>>x;
    vector<double> p(n+1);
    for(int i=1;i<=n;i++){
        cin>>p[i];
    }
    double ans=0.0;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(i+j==x){
                ans+=((p[i]/100)*(p[j]/100));
            }
        }
    }
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
くじ引き (3)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(8) 確率
くじ引き (3)
https://algo-method.com/tasks/766
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ld=long double;
int main(void){
    int n;
    cin>>n;
    ld num=(ld)(n-1)/n;
    ld ans=1-num*num;
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
同じ誕生日 (1)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(8) 確率
同じ誕生日 (1)
https://algo-method.com/tasks/765
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ld=long double;
int main(void){
    int n;
    cin>>n;
    ld num=1.0;
    for(int i=0;i<n;i++){
        num*=364.0/365.0;
    }
    ld ans=1-num;
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
くじ引き (4)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(8) 確率
くじ引き (4)
https://algo-method.com/tasks/771
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ld=long double;
int main(void){
    int n;
    cin>>n;
    ld num=1.0;
    for(int i=0;i<n;i++){
        num*=1.-1./n;
    }
    ld ans=1.0-num;
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
コイントス (2)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(8) 確率
コイントス (2)
https://algo-method.com/tasks/767
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
ll combination(ll n,ll r){
    ll permutation=1;
    for(ll i=0;i<r;i++){
        permutation*=(n-i);
    }
    ll factorial=1;
    for(ll i=1;i<=r;i++){
        factorial*=i;
    }
    ll ret=permutation/factorial;
    return ret;
}
ll twoPOW(ll n){
    ll ret=1;
    for(ll i=0;i<n;i++){
        ret*=2;
    }
    return ret;
}
int main(void){
    ll n,m;
    cin>>n>>m;
    ll cnt=combination(n,m);
    ll all=twoPOW(n);
    double ans=(double)cnt/all;
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
コイントス (3)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(8) 確率
コイントス (3)
https://algo-method.com/tasks/774
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
ll combination(ll n,ll r){
    ll permutation=1;
    for(ll i=0;i<r;i++){
        permutation*=(n-i);
    }
    ll factorial=1;
    for(ll i=1;i<=r;i++){
        factorial*=i;
    }
    ll ret=permutation/factorial;
    return ret;
}
ll twoPOW(ll n){
    ll ret=1;
    for(ll i=0;i<n;i++){
        ret*=2;
    }
    return ret;
}
int main(void){
    ll n,m,p;
    cin>>n>>m>>p;
    ll cnt=combination(n,m);
    double num=1.0;
    for(ll i=0;i<m;i++){
        num*=(double)p/100;
    }
    for(ll i=0;i<n-m;i++){
        num*=1.0-(double)p/100;
    }
    double ans=num*cnt;
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
くじ引き (5)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(8) 確率
くじ引き (5)
https://algo-method.com/tasks/775
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    double n,k;
    cin>>n>>k;
    cout<<fixed<<setprecision(10)<<k/n<<endl;
    return 0;
}
くじ引き (6)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(8) 確率
くじ引き (6)
https://algo-method.com/tasks/778
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    double n,k;
    cin>>n>>k;
    double ans=1.0/n;
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
同じ誕生日 (2)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(8) 確率
同じ誕生日 (2)
https://algo-method.com/tasks/764
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ld=long double;
int main(void){
    int n;
    cin>>n;
    ld num=1.0;
    for(int i=0;i<n;i++){
        num*=(ld)(365-i)/365;
    }
    ld ans=1.0-num;
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
出目の範囲

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(8) 確率
出目の範囲
https://algo-method.com/tasks/780
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ld=long double;
int main(void){
    ld n,x;
    cin>>n>>x;
    ld num=x/6.0;
    ld ans=pow(num,n);
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
サイコロの最大値

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(8) 確率
サイコロの最大値
https://algo-method.com/tasks/781
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ld=long double;
int main(void){
    ld n,m;
    cin>>n>>m;
    ld num1=m/6.0;
    ld num2=(m-1)/6.0;
    ld ans=pow(num1,n)-pow(num2,n);
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
コイントス (4)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(8) 確率
コイントス (4)
https://algo-method.com/tasks/782
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
ll combination(ll n,ll r){
    ll permutation=1;
    for(ll i=0;i<r;i++){
        permutation*=(n-i);
    }
    ll factorial=1;
    for(ll i=1;i<=r;i++){
        factorial*=i;
    }
    ll ret=permutation/factorial;
    return ret;
}
ll twoPOW(ll n){
    ll ret=1;
    for(ll i=0;i<n;i++){
        ret*=2;
    }
    return ret;
}
int main(void){
    ll n,m;
    cin>>n>>m;
    if((n+m)%2){
        cout<<0<<endl;
        return 0;
    }
    ll front=(n+m)/2,back=(n-m)/2;
    ll cnt=combination(n,front);
    ll all=twoPOW(n);
    long double ans=(long double)cnt/all;
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
2つの袋とボール (1)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(8) 確率
2つの袋とボール (1)
https://algo-method.com/tasks/787
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ld=long double;
int main(void){
    ld x,y;
    cin>>x>>y;
    ld ans=x/(x+y);
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
2つの袋とボール (2)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(8) 確率
2つの袋とボール (2)
https://algo-method.com/tasks/788
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ld=long double;
int main(void){
    ld n,m,x,y;
    cin>>n>>m>>x>>y;
    ld r0=n*(x/100),r1=m*(y/100);
    ld ans=r0/(r0+r1);
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
2つの袋とボール (3)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(8) 確率
2つの袋とボール (3)
https://algo-method.com/tasks/789
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ld=long double;
int main(void){
    ld n,x,y;
    cin>>n>>x>>y;
    ld r0=n*x/100,r1=(100-n)*y/100;
    ld ans=r0/(r0+r1);
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
検査の精度

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(8) 確率
検査の精度
https://algo-method.com/tasks/790
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ld=long double;
int main(void){
    ld n,x;
    cin>>n>>x;
    ld a=n*x/100,b=(100-n)*(100-x)/100;
    ld ans=a/(a+b);
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
データの誤り (1)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(8) 確率
データの誤り (1)
https://algo-method.com/tasks/792
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ld=long double;
int main(void){
    ld x;
    cin>>x;
    ld ans=(100-x)/100;
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
データの誤り (2)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(8) 確率
データの誤り (2)
https://algo-method.com/tasks/791
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ld=long double;
int main(void){
    ld x;
    cin>>x;
    ld ans=(100-x)*(100-x)/(x*x+(100-x)*(100-x));
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
2つの袋とボール (4)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(8) 確率
2つの袋とボール (4)
https://algo-method.com/tasks/793
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ld=long double;
int main(void){
    ld n,m,x,y;
    cin>>n>>m>>x>>y;
    ld ans=x/(x+y);
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
モンティ・ホール問題

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(8) 確率
モンティ・ホール問題
https://algo-method.com/tasks/769
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ld=long double;
int main(void){
    ld ans1=(ld)2.0/3.0,ans2=(ld)1.0/3.0;
    cout<<fixed<<setprecision(10)<<ans1<<endl<<ans2<<endl;
    return 0;
}
くじ引き (Ex)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(8) 確率
くじ引き (Ex)
https://algo-method.com/tasks/779
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    double n,m,k;
    cin>>n>>m>>k;
    double ans=m/n;
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
データの誤り (Ex)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(8) 確率
データの誤り (Ex)
https://algo-method.com/tasks/794
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ld=long double;
int main(void){
    ld x;
    cin>>x;
    ld p=x/100;
    ld ans=pow(1-p,3)+3*p*pow(1-p,2);
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}

設問の出典は、情報科学をコツコツ積み立てて学習できるサービス「アルゴ式(beta版)」です。
algo-method.com