結果

問題 No.105 arcの六角ボルト
ユーザー Tatsu_mrTatsu_mr
提出日時 2024-10-24 13:35:35
言語 C++23
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 74 ms / 5,000 ms
コード長 1,918 bytes
コンパイル時間 3,303 ms
コンパイル使用メモリ 247,444 KB
実行使用メモリ 6,816 KB
最終ジャッジ日時 2024-10-24 13:35:39
合計ジャッジ時間 4,180 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 74 ms
6,816 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
#define For(i, a, b) for(long long i = a; i < b; i++)
#define rep(i, n) For(i, 0, n)
#define rFor(i, a, b) for(long long i = a; i >= b; i--)
#define ALL(v) (v).begin(), (v).end()
#define rALL(v) (v).rbegin(), (v).rend()
using namespace std;

using lint = long long;
using ld = long double;

int INF = 2000000000;
lint LINF = 1000000000000000000;

namespace geometry {

using ld = long double;

ld PI = acos(-1);

struct Point {
    ld x, y;
    
    Point() {}
    Point(ld x_, ld y_) : x(x_), y(y_) {}
    
    friend istream &operator>>(istream &is, Point &p) {
        ld x, y;
        is >> x >> y;
        p = Point(x, y);
        return is;
    }
    
    friend ostream &operator<<(ostream &os, Point &p) {
        return os << fixed << setprecision(10) << p.x << " " << p.y;
    }
};

ld radian_to_degree(ld r) {
    return r * 180.0 / PI;
}

ld degree_to_radian(ld d) {
    return d * PI / 180.0;
}

// theta : radian
Point rotate(Point p, ld theta) {
    return Point(cos(theta) * p.x - sin(theta) * p.y, sin(theta) * p.x + cos(theta) * p.y);
}

// radian
ld angle(Point p, Point q) {
    return acos(p.x * q.x + p.y * q.y);
}

} // namespace geometry

using namespace geometry;

int main() {
    int t;
    cin >> t;
    while (t--) {
        Point base(1.0, 0.0);
        vector<Point> ps(6);
        rep(i, 6) {
            cin >> ps[i];
        }
        rep(i, 6) {
            Point p = ps[i];
            if (-0.00000000001 < p.x && -0.00000000001 < p.y) {
                if (p.y < 0.00000000001) {
                    cout << "0.0000000000" << endl;
                    break;
                }
                ld ang = angle(base, p);
                ld deg = radian_to_degree(ang);
                if (0 <= deg && deg < 50) {
                    cout << fixed << setprecision(10) << deg << endl;
                    break;
                }
            }
        }
    }
}
0