寝癖頭の解法

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

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

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

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

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

かたよったくじ (1)

algo-method.com

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

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(9) 期待値
かたよったくじ (2)
https://algo-method.com/tasks/796
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ld=long double;
int main(void){
    ld m;
    cin>>m;
    ld ans=0.0,div=0.0;
    for(ld i=0;i<m;i++){
        ld a,c;
        cin>>a>>c;
        ans+=a*c;
        div+=c;
    }
    ans/=div;
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
かたよったくじ (3)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(9) 期待値
かたよったくじ (3)
https://algo-method.com/tasks/797
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ld=long double;
int main(void){
    ld m;
    cin>>m;
    ld ans=0.0;
    for(ld i=0;i<m;i++){
        ld a,p;
        cin>>a>>p;
        ans+=(a*p/100);
    }
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
変わったサイコロ (4)

algo-method.com

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

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(9) 期待値
宝くじの期待値
https://algo-method.com/tasks/799
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ld=long double;
int main(void){
    ld n;
    cin>>n;
    vector<ld> a(n),b(n);
    ld sum=0.0;
    for(ld i=0;i<n;i++){
        cin>>a[i];
    }
    for(ld i=0;i<n;i++){
        cin>>b[i];
        sum+=b[i];
    }
    ld ans=0.0;
    for(ld i=0;i<n;i++){
        ans+=a[i]*b[i]/sum;
    }
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
期待値の性質 (1)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(9) 期待値
期待値の性質 (1)
https://algo-method.com/tasks/800
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int main(void){
    ll m,k;
    cin>>m>>k;
    vector<ll> a(m),p(m);
    for(ll i=0;i<m;i++){
        cin>>a[i]>>p[i];
    }
    cout<<k<<endl;
    return 0;
}
期待値の性質 (2)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(9) 期待値
期待値の性質 (2)
https://algo-method.com/tasks/801
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int main(void){
    ll m,k;
    cin>>m>>k;
    vector<ll> a(m),p(m);
    for(ll i=0;i<m;i++){
        cin>>a[i]>>p[i];
    }
    cout<<k<<endl;
    return 0;
}
期待値の性質 (3)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(9) 期待値
期待値の性質 (3)
https://algo-method.com/tasks/802
提出コードの解答例
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;
    vector<ld> a(n),p(n),b(m),q(m);
    for(ld i=0;i<n;i++){
        cin>>a[i]>>p[i];
    }
    for(ld i=0;i<m;i++){
        cin>>b[i]>>q[i];
    }
    ld ans=0.0;
    for(ld i=0;i<n;i++){
        for(ld j=0;j<m;j++){
            ans+=(a[i]+b[j])*(p[i]/100)*(q[j]/100);
        }
    }
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
期待値の性質 (4)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(9) 期待値
期待値の性質 (4)
https://algo-method.com/tasks/803
提出コードの解答例
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;
    vector<ld> a(n),p(n),b(m),q(m);
    for(ld i=0;i<n;i++){
        cin>>a[i]>>p[i];
    }
    for(ld i=0;i<m;i++){
        cin>>b[i]>>q[i];
    }
    ld ans=0.0;
    for(ld i=0;i<n;i++){
        for(ld j=0;j<m;j++){
            ans+=(a[i]*b[j])*(p[i]/100)*(q[j]/100);
        }
    }
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
コイントス (5)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(9) 期待値
コイントス (5)
https://algo-method.com/tasks/805
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
using ld=long double;
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;
    cin>>n;
    for(ll i=0;i<=n;i++){
        ll cnt=combination(n,i);
        ll all=twoPOW(n);
        ld ans=(ld)cnt/all;
        cout<<fixed<<setprecision(10)<<ans<<endl;
    }
    return 0;
}
コイントス (6)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(9) 期待値
コイントス (6)
https://algo-method.com/tasks/806
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
using ld=long double;
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;
}
int main(void){
    ll n; ld p;
    cin>>n>>p;
    for(ll i=0;i<=n;i++){
        ll cnt=combination(n,i);
        ld num=1.0;
        num*=pow(p/100,i);
        num*=pow((100-p)/100,n-i);
        ld ans=cnt*num;
        cout<<fixed<<setprecision(10)<<ans<<endl;
    }
    return 0;
}
コイントス (7)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(9) 期待値
コイントス (7)
https://algo-method.com/tasks/811
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ld=long double;
int main(void){
    ld p;
    cin>>p;
    ld num=p/100;
    for(ld i=1;i<=10;i++){
        ld ans=pow(1-num,i-1)*num;
        cout<<fixed<<setprecision(10)<<ans<<endl;
    }
    return 0;
}
二項分布の期待値

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(9) 期待値
二項分布の期待値
https://algo-method.com/tasks/808
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ld=long double;
int main(void){
    ld n,p;
    cin>>n>>p;
    ld ans=n*p/100;
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
幾何分布の期待値

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(9) 期待値
幾何分布の期待値
https://algo-method.com/tasks/809
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ld=long double;
int main(void){
    ld p;
    cin>>p;
    ld ans=100/p;
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
すごろく

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(9) 期待値
すごろく
https://algo-method.com/tasks/813
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ld=long double;
int main(void){
    ld n;
    cin>>n;
    vector<ld> d(6);
    for(ld i=0;i<6;i++){
        cin>>d[i];
    }
    ld num=0.0;
    for(ld i=0;i<6;i++){
        num+=d[i];
    }
    num/=6;
    ld ans=num*n;
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
席替え

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(9) 期待値
席替え
https://algo-method.com/tasks/815
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n;
    cin>>n;
    cout<<1<<endl;
    return 0;
}
Ex. シマシマ

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(9) 期待値
Ex. シマシマ度
https://algo-method.com/tasks/814
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ld=long double;
int main(void){
    ld n;
    cin>>n;
    ld ans=(n+1)/2;
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
Ex. クーポンコレクター問題

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(9) 期待値
Ex. クーポンコレクター問題
https://algo-method.com/tasks/810
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ld=long double;
int main(void){
    ld n;
    cin>>n;
    ld ans=0.0;
    for(ld i=0;i<n;i++){
        ld num=n/(n-i);
        ans+=num;
    }
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}

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