AOJ プログラミング入門 トピック#10

#トピック#10
##[ITP1_10_A](https://onlinejudge.u-aizu.ac.jp/courses/lesson/2/ITP1/10/ITP1_10_A)
###距離

//2点間の距離
d = sqrt( (x2-x1)^2 + (y2-y1)^2 )

```C++:C++
#include<iostream>
#include<vector>
#include<algorithm>
#include<iomanip>
#include<utility>
#include<iomanip>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<cctype>

#define rep(i,n) for(int i=0; i<(n); ++i)
#define pai 3.1415926535897932384
#define NUM_MAX 2e18
#define NUM_MIN -1e9

using namespace std;
using ll =long long;
using P = pair<int,int>;

int main(int argc, const char * argv[]) {
    double x1, y1, x2, y2;
    cin >> x1 >> y1 >> x2 >> y2;
    
    cout << fixed << setprecision(10) << sqrt( (x2-x1) * (x2-x1) + (y2-y1) * (y2-y1)) << endl;
    
    return 0;
}
```

##[ITP1_10_B](https://onlinejudge.u-aizu.ac.jp/courses/lesson/2/ITP1/10/ITP1_10_B)
###三角形
辺cを求めます。
//三角形の公式
S=1/2*a*b*sin(C*pai/180)
//余弦定理
c^2=a^2+b^2-2*a*b*cos(C*pai/180)
//高さ
S=1/2*a*h
を変形して
h=2S/a

```C++:C++
#include<iostream>
#include<vector>
#include<algorithm>
#include<iomanip>
#include<utility>
#include<iomanip>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<cctype>

#define rep(i,n) for(int i=0; i<(n); ++i)
#define pai 3.1415926535897932384
#define NUM_MAX 2e18
#define NUM_MIN -1e9

using namespace std;
using ll =long long;
using P = pair<int,int>;

int main(int argc, const char * argv[]) {
    double a, b, C;
    cin >> a >> b >> C;
    
    double S= 1.0f/2.0f*a*b*sin(C*pai / 180.0f);
    double c = sqrt( a*a + b*b - 2.0f*a*b*cos(C*pai / 180.0f));
    
    cout << fixed << setprecision(10) << S << endl;
    cout << fixed << setprecision(10) << a+b+c << endl;
    cout << fixed << setprecision(10) << 2*S/a << endl;
    
    return 0;
}
```

##[ITP1_10_C](https://onlinejudge.u-aizu.ac.jp/courses/lesson/2/ITP1/10/ITP1_10_C)
###標準偏差

###[標準偏差の意味と求め方](https://ai-trend.jp/basic-study/basic/standard-deviation/)
統計学？
一体何を計算しているんだ...
今回は次の式で指定されています。
α2 = (∑ni=1(si - m)2)/n

```C++:C++
#include<iostream>
#include<vector>
#include<algorithm>
#include<iomanip>
#include<utility>
#include<iomanip>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<cctype>

#define rep(i,n) for(int i=0; i<(n); ++i)
#define pai 3.1415926535897932384
#define NUM_MAX 2e18
#define NUM_MIN -1e9

using namespace std;
using ll =long long;
using P = pair<int,int>;

int main(int argc, const char * argv[]) {
    
    int n;
    while(true){
        cin >> n;
        
        if(n==0) break;
        
        vector<double> s(n);
        double m = 0;
        rep(i, n){
            cin >> s[i];
            m += s[i];
        }
        m = m / (double)n;
        double ans = 0;
        rep(i, n){
            ans += (s[i] - m) * (s[i] - m);
        }
        
        cout << fixed << setprecision(10) << sqrt(ans/n) << endl;
    }
    
    return 0;
}
```

##[ITP1_10_D](https://onlinejudge.u-aizu.ac.jp/courses/lesson/2/ITP1/10/ITP1_10_D)
###ミンコフスキー距離

何も分からない。
与えられた式の通りの実装。

```C++:C++
#include<iostream>
#include<vector>
#include<algorithm>
#include<iomanip>
#include<utility>
#include<iomanip>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<cctype>

#define rep(i,n) for(int i=0; i<(n); ++i)
#define pai 3.1415926535897932384
#define NUM_MAX 2e18
#define NUM_MIN -1e9

using namespace std;
using ll =long long;
using P = pair<int,int>;

int main(int argc, const char * argv[]) {
    int n;
    cin >> n;
    vector<double> x(n);
    vector<double> y(n);
    
    rep(i, n){
        cin >> x[i];
    }
    rep(i, n){
        cin >> y[i];
    }
    
    for(int p=1; p<=4; p++){
        if(p==4){
            double max_x = 0;
            rep(i, n){
                max_x = max(max_x, abs(x[i] - y[i]));
            }
            cout << fixed << setprecision(10) << max_x << endl;
        }else{
            double sum = 0;
            rep(i, n){
                sum += pow(abs(x[i]-y[i]), p);
            }
            cout << fixed << setprecision(10) << pow(sum, 1.0f/(double)p) << endl;
        }
    }
    
    return 0;
}
```