AtCoder Beginner Contest 239

##[A - Horizon](https://atcoder.jp/contests/abc239/tasks/abc239_a)

O(1)
fixed_setprecisionを使わないとWAでます。

```C++:C++
#include <bits/stdc++.h>
 
#define rep(i,n) for(int i=0; i<(n); ++i)
#define repx(i,x,n) for(int i=x; i<(n); ++i)
#define fixed_setprecision(n) fixed << setprecision((n))
#define execution_time(ti) printf("Execution Time: %.4lf sec\n", 1.0 * (clock() - ti) / CLOCKS_PER_SEC);
#define pai 3.1415926535897932384
#define NUM_MAX 2e18
#define NUM_MIN -1e9
 
using namespace std;
using ll = long long;
using P = pair<int,int>;
template<class T> inline bool chmax(T& a, T b){ if(a<b){ a=b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b){ if(a>b){ a=b; return 1; } return 0; }
 
int main() {
    double H;
    cin >> H;
 
    double ans = sqrt(H * ((double)12800000 + H));
    cout << fixed_setprecision(6) << ans << endl;
 
    return 0;
}
```

##[B - Integer Division](https://atcoder.jp/contests/abc239/tasks/abc239_b)

O(1)
負の数だけ条件分岐を行います。

```C++:C++
#include <bits/stdc++.h>
 
#define rep(i,n) for(int i=0; i<(n); ++i)
#define repx(i,x,n) for(int i=x; i<(n); ++i)
#define fixed_setprecision(n) fixed << setprecision((n))
#define execution_time(ti) printf("Execution Time: %.4lf sec\n", 1.0 * (clock() - ti) / CLOCKS_PER_SEC);
#define pai 3.1415926535897932384
#define NUM_MAX 2e18
#define NUM_MIN -1e9
 
using namespace std;
using ll = long long;
using P = pair<int,int>;
template<class T> inline bool chmax(T& a, T b){ if(a<b){ a=b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b){ if(a>b){ a=b; return 1; } return 0; }
 
int main() {
    ll x;
    cin >> x;
 
    ll xx = x % 10;
 
    if(xx<0) cout << (x / 10)-1 << endl;
    else cout << x / 10 << endl;
 
    return 0;
}
```

##[C - Knight Fork](https://atcoder.jp/contests/abc239/tasks/abc239_c)

O(N)
２点間の距離が√５になる距離を計測。
検索範囲はx1、y1から√５以下を検索する。

```C++:C++
#include <bits/stdc++.h>
 
#define rep(i,n) for(int i=0; i<(n); ++i)
#define repx(i,x,n) for(int i=x; i<(n); ++i)
#define fixed_setprecision(n) fixed << setprecision((n))
#define execution_time(ti) printf("Execution Time: %.4lf sec\n", 1.0 * (clock() - ti) / CLOCKS_PER_SEC);
#define pai 3.1415926535897932384
#define NUM_MAX 2e18
#define NUM_MIN -1e9
 
using namespace std;
using ll = long long;
using P = pair<int,int>;
template<class T> inline bool chmax(T& a, T b){ if(a<b){ a=b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b){ if(a>b){ a=b; return 1; } return 0; }
 
int main() {
    ll x1, y1, x2, y2;
    cin >> x1 >> y1 >> x2 >> y2;
 
    int ok=0;
    for(ll i=-3; i<4; i++){
        for(ll j=-3; j<4; j++){
            ll a = pow(x1 - (x1 - i), 2) + pow(y1-(y1 - j), 2);
            ll b = pow(x2 - (x1 - i), 2) + pow(y2-(y1 - j), 2);
            //cout << "a=" << a << "b=" << b << endl; 
            if(a == 5 && b == 5){
                ok=1;
            }
        }
    }
 
    if(ok) cout << "Yes" << endl;
    else cout << "No" << endl;
 
    return 0;
}
```

##[D - Prime Sum Game](https://atcoder.jp/contests/abc239/tasks/abc239_d)

O(N)
エラトスネテスの篩。
条件が厳しい場合は累積和を使用する。
その場合は、０番目から全ての素数の数を累積していく。
範囲内−１の素数の数と範囲内の素数の数を減算し、０の場合に高橋くんが勝利します。

```C++:C++
#include <bits/stdc++.h>
 
#define rep(i,n) for(int i=0; i<(n); ++i)
#define repx(i,x,n) for(int i=x; i<(n); ++i)
#define fixed_setprecision(n) fixed << setprecision((n))
#define execution_time(ti) printf("Execution Time: %.4lf sec\n", 1.0 * (clock() - ti) / CLOCKS_PER_SEC);
#define pai 3.1415926535897932384
#define NUM_MAX 2e18
#define NUM_MIN -1e9
 
using namespace std;
using ll = long long;
using P = pair<int,int>;
template<class T> inline bool chmax(T& a, T b){ if(a<b){ a=b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b){ if(a>b){ a=b; return 1; } return 0; }
 
bool is_prime_number[1000];
 
int main() {
    is_prime_number[1]=true;
    for(int i=2; i<1000; i++){
        if(!is_prime_number[i]){
            for(int j=i+i; j<1000; j+=i){
                is_prime_number[j] = true;
            }
        }
    }
 
    int a, b, c, d;
    cin >> a >> b >> c >> d;
 
    int ans=1;
    for(int i=a; i<=b; i++){
        int ok=0;
        for(int j=c; j<=d; j++){
            if(!is_prime_number[i+j]) ok=1;
        }
        if(!ok){
            ans=0;
            break;
        }
    }
    if(ans) cout << "Aoki" << endl;
    else cout << "Takahashi" << endl;
 
    return 0;
} 
```