寝癖頭の解法

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

アルゴ式(beta版): C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶデータサイエンス入門

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

C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶデータサイエンス入門

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

データの分布を調べる

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶデータサイエンス入門
データの分布を調べる
https://algo-method.com/tasks/701
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int main(void){
    ll n;
    cin>>n;
    vector<ll> a(n);
    for(ll i=0;i<n;i++){
        cin>>a[i];
    }
    ll num=5;
    vector<ll> v={-1,20,40,60,80,100};
    vector<ll> ans(num);
    for(ll i=0;i<num;i++){
        ans[i]=count_if(a.begin(),a.end(),
        [&](ll x){return (v[i]<x && x<=v[i+1]);});
    }
    for(ll i=0;i<num;i++){
        cout<<ans[i]<<endl;
    }
    return 0;
}
平均値

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶデータサイエンス入門
平均値
https://algo-method.com/tasks/694
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n;
    cin>>n;
    int sum=0;
    for(int i=0;i<n;i++){
        int a;
        cin>>a;
        sum+=a;
    }
    double ans=(double)sum/n;
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
中央値

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶデータサイエンス入門
中央値
https://algo-method.com/tasks/695
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n;
    cin>>n;
    vector<int> a(n);
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    sort(a.begin(),a.end());
    if(n%2){
        cout<<a[(n-1)/2]<<endl;
    }else{
        double ans=(double)(a[n/2-1]+a[n/2])/2;
        cout<<fixed<<setprecision(10)<<ans<<endl;
    }
    return 0;
}
最頻値

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶデータサイエンス入門
最頻値
https://algo-method.com/tasks/697
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n;
    cin>>n;
    vector<int> a(n);
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    vector<int> cnt(101);
    for(int i=0;i<n;i++){
        cnt[a[i]]++;
    }
    int m=*max_element(cnt.begin(),cnt.end());
    for(int i=0;i<101;i++){
        if(cnt[i]==m){
            cout<<i<<endl;
        }
    }
    return 0;
}
データの散らばり1 (平均偏差)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶデータサイエンス入門
データの散らばり1 (平均偏差)
https://algo-method.com/tasks/703
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n;
    cin>>n;
    vector<int> a(n),b(n);
    double aveA=0,aveB=0;
    for(int i=0;i<n;i++){
        cin>>a[i];
        aveA+=a[i];
    }
    aveA/=n;
    for(int i=0;i<n;i++){
        cin>>b[i];
        aveB+=b[i];
    }
    aveB/=n;
    double ansA=0,ansB=0;
    for(int i=0;i<n;i++){
        ansA+=abs(a[i]-aveA);
        ansB+=abs(b[i]-aveB);
    }
    ansA/=n;
    ansB/=n;
    if(ansA<ansB){
        cout<<"A"<<endl;
    }else if(ansA>ansB){
        cout<<"B"<<endl;
    }else{
        cout<<"same"<<endl;
    }
    return 0;
}
データの散らばり2-1 (分散)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶデータサイエンス入門
データの散らばり2-1 (分散)
https://algo-method.com/tasks/696
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n;
    cin>>n;
    vector<int> a(n),b(n);
    double aveA=0,aveB=0;
    for(int i=0;i<n;i++){
        cin>>a[i];
        aveA+=a[i];
    }
    aveA/=n;
    for(int i=0;i<n;i++){
        cin>>b[i];
        aveB+=b[i];
    }
    aveB/=n;
    double ansA=0,ansB=0;
    for(int i=0;i<n;i++){
        ansA+=(a[i]-aveA)*(a[i]-aveA);
        ansB+=(b[i]-aveB)*(b[i]-aveB);
    }
    ansA/=n;
    ansB/=n;
    if(ansA<ansB){
        cout<<"A"<<endl;
    }else if(ansA>ansB){
        cout<<"B"<<endl;
    }else{
        cout<<"same"<<endl;
    }
    return 0;
}
データの散らばり2-2 (標準偏差)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶデータサイエンス入門
データの散らばり2-2 (標準偏差)
https://algo-method.com/tasks/707
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n;
    cin>>n;
    vector<double> a(n);
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    double ave=accumulate(a.begin(),a.end(),0.0)/n;
    double var=transform_reduce(a.begin(),a.end(),0.0,
    [](double d,double e){return d+e;},
    [&](double d){return pow(d-ave,2);})/n;
    double ans=sqrt(var);
    cout<<fixed<<setprecision(10)<<var<<endl;
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
平均値をずらす

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶデータサイエンス入門
平均値をずらす
https://algo-method.com/tasks/721
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n;
    cin>>n;
    double ave=0.0;
    vector<double> a(n);
    for(int i=0;i<n;i++){
        cin>>a[i];
        ave+=a[i];
    }
    ave/=n;
    for(int i=0;i<n;i++){
        cout<<fixed<<setprecision(10)<<a[i]-ave<<((i==n-1) ? "\n" : " ");
    }
    return 0;
}
平均値をずらしたデータの分散

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶデータサイエンス入門
平均値をずらしたデータの分散
https://algo-method.com/tasks/722
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    cout<<1<<endl;
    return 0;
}
ばらつきの強調

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶデータサイエンス入門
ばらつきの強調
https://algo-method.com/tasks/723
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n,k;
    cin>>n>>k;
    vector<int> h(n);
    for(int i=0;i<n;i++){
        cin>>h[i];
    }
    for(int i=0;i<n;i++){
        int x=k*h[i];
        cout<<x<<((i==n-1) ? "\n" : " ");
    }
    return 0;
}
ばらつきを強調したデータの分散

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶデータサイエンス入門
ばらつきを強調したデータの分散
https://algo-method.com/tasks/724
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n,k;
    cin>>n>>k;
    vector<int> h(n);
    for(int i=0;i<n;i++){
        cin>>h[i];
    }
    cout<<k*k<<endl;
    return 0;
}
標準偏差の調整

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶデータサイエンス入門
標準偏差の調整
https://algo-method.com/tasks/725
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n;
    double aveA,sdA,aveB,sdB;
    cin>>n>>aveA>>sdA>>aveB>>sdB;
    double ans=sdB/sdA;
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
データ全体の補正 (線形変換)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶデータサイエンス入門
データ全体の補正 (線形変換)
https://algo-method.com/tasks/727
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int ave,sd,a0,a1;
    cin>>ave>>sd>>a0>>a1;
    int aveANS=a0+a1*ave;
    int sdANS=a1*sd;
    cout<<aveANS<<" ";
    cout<<sdANS<<endl;
    return 0;
}
標準化

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶデータサイエンス入門
標準化
https://algo-method.com/tasks/726
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n;
    cin>>n;
    vector<double> h(n);
    for(int i=0;i<n;i++){
        cin>>h[i];
    }
    double ave=accumulate(h.begin(),h.end(),0.0)/n;
    double var=transform_reduce(h.begin(),h.end(),0.0,
    [](double a,double b){return a+b;},
    [&](double a){return pow(a-ave,2);})/n;
    double sd=sqrt(var);
    vector<double> x(n);
    for(int i=0;i<n;i++){
        x[i]=(h[i]-ave)/sd;
    }
    for(int i=0;i<n;i++){
        cout<<fixed<<setprecision(10)<<x[i]<<((i==n-1) ? "\n" : " ");
    }
    return 0;
}
正規化

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶデータサイエンス入門
正規化
https://algo-method.com/tasks/728
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n;
    cin>>n;
    vector<double> h(n);
    double mi=300.0,ma=0.0;
    for(int i=0;i<n;i++){
        cin>>h[i];
        mi=min(mi,h[i]);
        ma=max(ma,h[i]);
    }
    for(int i=0;i<n;i++){
        double x=(h[i]-mi)/(ma-mi);
        cout<<fixed<<setprecision(10)<<x<<((i==n-1) ? "\n" : " ");
    }
    return 0;
}
四分位数

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶデータサイエンス入門
四分位数
https://algo-method.com/tasks/709
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
double f(vector<double> a,int l,int r){
    if((r-l)%2){
        int mid=l+(r-l-1)/2;
        return a[mid];
    }else{
        int mid=l+(r-l)/2;
        return (a[mid-1]+a[mid])/2;
    }
}
int main(void){
    int n;
    cin>>n;
    vector<double> a(n);
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    sort(a.begin(),a.end());
    double q1;
    if(n%2){
        q1=f(a,0,(n-1)/2);
    }else{
        q1=f(a,0,n/2);
    }
    double mid=f(a,0,n);
    double q3;
    if(n%2){
        q3=f(a,(n-1)/2+1,n);
    }else{
        q3=f(a,n/2,n);
    }
    cout<<q1<<" "<<mid<<" "<<q3<<endl;
    return 0;
}
四分位範囲

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶデータサイエンス入門
四分位範囲
https://algo-method.com/tasks/716
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
double f(vector<double> x,int l,int r){
    if((r-l)%2){
        int mid=l+(r-l-1)/2;
        return x[mid];
    }else{
        int mid=l+(r-l)/2;
        return (x[mid-1]+x[mid])/2;
    }
}
double IQR(vector<double> x){
    int xs=x.size();
    double q1;
    if(xs%2){
        q1=f(x,0,(xs-1)/2);
    }else{
        q1=f(x,0,xs/2);
    }
    double q3;
    if(xs%2){
        q3=f(x,(xs-1)/2+1,xs);
    }else{
        q3=f(x,xs/2,xs);
    }
    double r=q3-q1;
    return r;
}
int main(void){
    int n;
    cin>>n;
    vector<double> a(n),b(n);
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    for(int i=0;i<n;i++){
        cin>>b[i];
    }
    sort(a.begin(),a.end());
    sort(b.begin(),b.end());
    double aIQR=IQR(a);
    double bIQR=IQR(b);
    if(aIQR<bIQR){
        cout<<"A"<<endl;
    }else if(aIQR==bIQR){
        cout<<"same"<<endl;
    }else{
        cout<<"B"<<endl;
    }
    return 0;
}
データの散らばり 3-1 (偏差値 その1)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶデータサイエンス入門
データの散らばり 3-1 (偏差値 その1)
https://algo-method.com/tasks/712
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    double x,u,o;
    cin>>x>>u>>o;
    double ans=50.0+10.0*((x-u)/o);
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
データの散らばり 3-2 (偏差値 その2)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶデータサイエンス入門
データの散らばり 3-2 (偏差値 その2)
https://algo-method.com/tasks/708
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n;
    cin>>n;
    vector<double> a(n);
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    double ave=accumulate(a.begin(),a.end(),0.0)/n;
    double var=transform_reduce(a.begin(),a.end(),0.0,
    [](double d,double e){return d+e;},
    [&](double d){return pow(d-ave,2);})/n;
    double sd=sqrt(var);
    double ans=50.0+(double)10*(a[0]-ave)/sd;
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
データ間の関係性1

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶデータサイエンス入門
データ間の関係性1
https://algo-method.com/tasks/710
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n;
    cin>>n;
    vector<int> a(n),b(n);
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    for(int i=0;i<n;i++){
        cin>>b[i];
    }
    double sumA=accumulate(a.begin(),a.end(),0.0);
    double sumB=accumulate(b.begin(),b.end(),0.0);
    double aveA=sumA/n;
    double aveB=sumB/n;
    cout<<fixed<<setprecision(10)<<min(aveA,aveB)/max(aveA,aveB)<<endl;
    return 0;
}
データ間の関係性 2-1 (共分散)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶデータサイエンス入門
データ間の関係性 2-1 (共分散)
https://algo-method.com/tasks/713
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n;
    cin>>n;
    vector<double> a(n),b(n);
    double aveA=0.0,aveB=0.0;
    for(int i=0;i<n;i++){
        cin>>a[i];
        aveA+=a[i];
    }
    aveA/=n;
    for(int i=0;i<n;i++){
        cin>>b[i];
        aveB+=b[i];
    }
    aveB/=n;
    double ans=0.0;
    for(int i=0;i<n;i++){
        ans+=(a[i]-aveA)*(b[i]-aveB);
    }
    ans/=n;
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
データ間の関係性 2-2 (相関係数)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶデータサイエンス入門
データ間の関係性 2-2 (相関係数)
https://algo-method.com/tasks/714
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n;
    cin>>n;
    vector<double> a(n),b(n);
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    for(int i=0;i<n;i++){
        cin>>b[i];
    }
    double aveA=accumulate(a.begin(),a.end(),0.0)/n;
    double aveB=accumulate(b.begin(),b.end(),0.0)/n;
    double cov=0.0;
    for(int i=0;i<n;i++){
        cov+=(a[i]-aveA)*(b[i]-aveB);
    }
    cov/=n;
    double sdA=0.0,sdB=0.0;
    for(int i=0;i<n;i++){
        sdA+=(a[i]-aveA)*(a[i]-aveA);
        sdB+=(b[i]-aveB)*(b[i]-aveB);
    }
    sdA=sqrt(sdA/n),sdB=sqrt(sdB/n);
    cout<<fixed<<setprecision(10)<<cov/sdA/sdB<<endl;
    return 0;
}
正の相関と負の相関

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶデータサイエンス入門
正の相関と負の相関
https://algo-method.com/tasks/715
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n;
    cin>>n;
    vector<double> a(n),b(n);
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    for(int i=0;i<n;i++){
        cin>>b[i];
    }
    double aveA=accumulate(a.begin(),a.end(),0.0)/n;
    double aveB=accumulate(b.begin(),b.end(),0.0)/n;
    double cov=0.0;
    for(int i=0;i<n;i++){
        cov+=(a[i]-aveA)*(b[i]-aveB);
    }
    cov/=n;
    double sdA=0.0,sdB=0.0;
    for(int i=0;i<n;i++){
        sdA+=(a[i]-aveA)*(a[i]-aveA);
        sdB+=(b[i]-aveB)*(b[i]-aveB);
    }
    sdA=sqrt(sdA/n),sdB=sqrt(sdB/n);
    double r=cov/sdA/sdB;
    if(r>0.3){
        cout<<"Positive"<<endl;
    }else if(r<-0.3){
        cout<<"Negative"<<endl;
    }else{
        cout<<"No correlation"<<endl;
    }
    return 0;
}
都道府県の面積最大値

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶデータサイエンス入門
都道府県の面積最大値
https://algo-method.com/tasks/734
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n=47;
    vector<string> x(n);
    vector<double> s(n);
    for(int i=0;i<n;i++){
        cin>>x[i]>>s[i];
    }
    double ave=accumulate(s.begin(),s.end(),0.0)/n;
    double var=transform_reduce(s.begin(),s.end(),0.0,
    [](double a,double b){return a+b;},
    [&](double a){return pow(a-ave,2);})/n;
    double sd=sqrt(var);
    cout<<fixed<<setprecision(2);
    for(int i=0;i<n;i++){
        double t=50+10.0*(s[i]-ave)/sd;
        double anst=round(t*100)/100;
        cout<<x[i]<<" "<<anst<<endl;
    }
    return 0;
}
人口密度と平均年齢

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶデータサイエンス入門
人口密度と平均年齢
https://algo-method.com/tasks/733
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n=47;
    vector<string> x(n);
    vector<double> s(n),p(n),a(n);
    for(int i=0;i<n;i++){
        cin>>x[i]>>s[i]>>p[i]>>a[i];
    }
    vector<double> v(n);
    for(int i=0;i<n;i++){
        v[i]=p[i]/s[i];
    }
    double aveV=accumulate(v.begin(),v.end(),0.0)/n;
    double aveA=accumulate(a.begin(),a.end(),0.0)/n;
    double covVA=0.0;
    for(int i=0;i<n;i++){
        covVA+=(v[i]-aveV)*(a[i]-aveA);
    }
    covVA/=n;
    double sdV=0.0,sdA=0.0;
    for(int i=0;i<n;i++){
        sdV+=(v[i]-aveV)*(v[i]-aveV);
        sdA+=(a[i]-aveA)*(a[i]-aveA);
    }
    sdV/=n,sdA/=n;
    sdV=sqrt(sdV),sdA=sqrt(sdA);
    cout<<fixed<<setprecision(10)<<covVA/sdV/sdA<<endl;
    return 0;
}
新たな代表値?

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶデータサイエンス入門
新たな代表値?
https://algo-method.com/tasks/706
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n;
    cin>>n;
    int sum=0;
    for(int i=0;i<n;i++){
        int a;
        cin>>a;
        sum+=a;
    }
    double ans=(double)sum/n;
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}
偏差値の最大値

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶデータサイエンス入門
偏差値の最大値
https://algo-method.com/tasks/702
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    double n;
    cin>>n;
    double ans=50.0+10.0*sqrt(n-1.0);
    cout<<fixed<<setprecision(10)<<ans<<endl;
    return 0;
}

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