寝癖頭の解法

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

Aizu Online Judge in C++ #ITP1_10_A~D(4 problems)

Aizu Online Judge(AOJ)の過去問から、C++による提出コードの解答例です。
Introduction to Programming IよりTopic # 10のAからDまでの計4問です。
https://onlinejudge.u-aizu.ac.jp/courses/lesson/2/ITP1/10

Topic # 10 "Math Functions"

・ITP1_10_A : Distance
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_10_A
・ITP1_10_B : Triangle
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_10_B
・ITP1_10_C : Standard Deviation
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_10_C
・ITP1_10_D : Distance II
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_10_D

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

・ITP1_10_A : Distance
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_10_A

/*
ITP1_10_A : Distance
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_10_A
 提出コードの解答例
 https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    double x1,y1,x2,y2;
    cin>>x1>>y1>>x2>>y2;
    double ans1=pow(x2-x1,2)+pow(y2-y1,2);
    double ans2=sqrt(ans1);
    printf("%.5lf",ans2);
    return 0;
}

・ITP1_10_B : Triangle
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_10_B

/*
ITP1_10_B : Triangle
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_10_B
 提出コードの解答例
 https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
const long double pi=3.14159265358979323846;
int main(void){
    long double a,b,C;
    cin>>a>>b>>C;
    long double S=a*b*sin(C/180.0*pi)/2.0;
    cout<<setprecision(15)<<S<<endl;
    long double c=sqrt(powl(a,2)+powl(b,2)-2.0*a*b*cos(C/180.0*pi));
    long double L=a+b+c;
    cout<<setprecision(15)<<L<<endl;
    long double h=2.0*S/a;
    cout<<setprecision(15)<<h<<endl;
    return 0;
}

・ITP1_10_C : Standard Deviation
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_10_C

/*
ITP1_10_C : Standard Deviation
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_10_C
 提出コードの解答例
 https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    while(1){
        int n;
        cin>>n;
        if(n==0){
            return 0;
        }
        vector<long double> s(n);
        long double sum=0;
        for(int i=0;i<n;i++){
            cin>>s[i];
            sum+=s[i];
        }
        long double m=sum/n;
        long double aa=0;
        for(int i=0;i<n;i++){
            aa+=pow(s[i]-m,2);
        }
        aa/=n;
        long double a=sqrt(aa);
        cout<<setprecision(20)<<a<<endl;
    }
}

・ITP1_10_D : Distance II
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_10_D

/*
ITP1_10_D : Distance II
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_10_D
 提出コードの解答例
 https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n;
    cin>>n;
    vector<long double> x(n),y(n);
    for(int i=0;i<n;i++){
        cin>>x[i];
    }
    for(int i=0;i<n;i++){
        cin>>y[i];
    }
    long double one=0.0;
    for(int i=0;i<n;i++){
        one+=(abs(x[i]-y[i]));
    }
    long double two=0.0;
    for(int i=0;i<n;i++){
        two+=(pow(abs(x[i]-y[i]),2));
    }
    two=sqrt(two);
    long double three=0.0;
    for(int i=0;i<n;i++){
        three+=(pow(abs(x[i]-y[i]),3));
    }
    three=cbrt(three);
    long double inf=-1.0;
    for(int i=0;i<n;i++){
        inf=max(inf,abs(x[i]-y[i]));
    }
    cout<<setprecision(20)<<one<<endl;
    cout<<setprecision(20)<<two<<endl;
    cout<<setprecision(20)<<three<<endl;
    cout<<setprecision(20)<<inf<<endl;
    return 0;
}

設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/