結果
問題 | No.760 Where am I moved to? |
ユーザー | Pachicobue |
提出日時 | 2018-12-08 02:18:25 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 3 ms / 2,000 ms |
コード長 | 2,596 bytes |
コンパイル時間 | 2,164 ms |
コンパイル使用メモリ | 202,500 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-05-04 00:03:31 |
合計ジャッジ時間 | 10,589 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
5,248 KB |
testcase_01 | AC | 2 ms
5,376 KB |
testcase_02 | AC | 2 ms
5,376 KB |
testcase_03 | AC | 2 ms
5,376 KB |
testcase_04 | AC | 2 ms
5,376 KB |
testcase_05 | AC | 2 ms
5,376 KB |
testcase_06 | AC | 1 ms
5,376 KB |
testcase_07 | AC | 2 ms
5,376 KB |
testcase_08 | AC | 1 ms
5,376 KB |
testcase_09 | AC | 3 ms
5,376 KB |
testcase_10 | AC | 2 ms
5,376 KB |
ソースコード
#include <bits/stdc++.h> using ld = long double; constexpr ld PI = 3.141592653589793238462643383279; constexpr ld EPS = 1e-10; using A3 = std::array<ld, 3>; using M3 = std::array<A3, 3>; inline ld dot(const A3& a, const A3& b) { return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; } inline A3 mul(const M3& m, const A3& a) { return A3{dot(m[0], a), dot(m[1], a), dot(m[2], a)}; } using A2 = std::array<ld, 2>; using M2 = std::array<A2, 2>; inline A2 add(const A2& a, const A2& b) { return A2{a[0] + b[0], a[1] + b[1]}; } inline A2 sub(const A2& a, const A2& b) { return A2{a[0] - b[0], a[1] - b[1]}; } inline M2 sub(const M2& m1, const M2& m2) { return M2{sub(m1[0], m2[0]), sub(m1[1], m2[1])}; } inline ld dot(const A2& a, const A2& b) { return a[0] * b[0] + a[1] * b[1]; } inline A2 mul(const M2& m, const A2& a) { return A2{dot(m[0], a), dot(m[1], a)}; } inline M2 inv(const M2& m) { const ld det = m[0][0] * m[1][1] - m[0][1] * m[1][0]; return M2{{{m[1][1] / det, m[0][1] / (-det)}, {m[1][0] / (-det), m[0][0] / det}}}; } inline M2 mul(const M2& m1, const M2 m2) { return M2{{{m1[0][0] * m2[0][0] + m1[0][1] * m2[1][0], m1[0][0] * m2[0][1] + m1[0][1] * m2[1][1]}, {m1[1][0] * m2[0][0] + m1[1][1] * m2[1][0], m1[1][0] * m2[0][1] + m1[1][1] * m2[1][1]}}}; } constexpr M2 U2{{{1, 0}, {0, 1}}}; constexpr M2 Z2{{{0, 0}, {0, 0}}}; int main() { ld xa, ya, ta, x11, y11, x12, y12, u21, v21, u22, v22; std::cin >> xa >> ya >> ta >> x11 >> y11 >> x12 >> y12 >> u21 >> v21 >> u22 >> v22, (ta *= PI) /= 180; const M3 w2s{{{std::cos(ta), std::sin(ta), -xa * std::cos(ta) - ya * std::sin(ta)}, {-std::sin(ta), std::cos(ta), xa * std::sin(ta) - ya * std::cos(ta)}, {0, 0, 1}}}; const auto p1 = mul(w2s, A3{u21, v21, 1}), p2 = mul(w2s, A3{u22, v22, 1}); const ld x21 = p1[0], y21 = p1[1], x22 = p2[0], y22 = p2[1]; const M2 m1 = {{{x21, -y21}, {y21, x21}}}, m2 = {{{x22, -y22}, {y22, x22}}}; const M2 m1m2 = inv(sub(m1, m2)); const M2 m11 = m1m2, m12 = sub(Z2, m1m2), m21 = mul(sub(Z2, m1m2), m2), m22 = mul(m1m2, m1); const A2 q1 = A2{x11, y11}, q2 = A2{x12, y12}; const A2 s1 = add(mul(m11, q1), mul(m12, q2)), s2 = add(mul(m21, q1), mul(m22, q2)); std::cerr << s1[0] << " " << s1[1] << " " << s2[0] << " " << s2[1] << std::endl; const ld norm = std::sqrt(s1[0] * s1[0] + s1[1] * s1[1]); ld theta = (std::abs(1 - norm) > EPS ? 0 : s1[1] / norm >= EPS ? std::acos(s1[0] / norm) : 2 * PI - std::acos(s1[0] / norm)); std::cout << std::fixed << std::setprecision(15) << s2[0] << " " << s2[1] << " " << theta / PI * 180 << std::endl; return 0; }