結果

問題 No.2447 行列累乗根
ユーザー SSRSSSRS
提出日時 2023-08-25 22:38:03
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 799 ms / 2,000 ms
コード長 2,058 bytes
コンパイル時間 2,113 ms
コンパイル使用メモリ 205,204 KB
最終ジャッジ日時 2025-02-16 14:12:25
ジャッジサーバーID
(参考情報)
judge5 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 28
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#include <bits/stdc++.h>
using namespace std;
const double eps = 0.00000000001;
int main(){
cout << fixed << setprecision(5);
int T;
cin >> T;
for (int i = 0; i < T; i++){
vector<vector<double>> M(2, vector<double>(2));
for (int j = 0; j < 2; j++){
for (int k = 0; k < 2; k++){
cin >> M[j][k];
}
}
if (M[0][1] == 0 && M[1][0] == 0){
cout << cbrt(M[0][0]) << ' ' << "0.00000" << endl;
cout << "0.00000" << ' ' << cbrt(M[1][1]) << endl;
} else {
double tr = M[0][0] + M[1][1];
double det = M[0][0] * M[1][1] - M[0][1] * M[1][0];
vector<double> eigen = {(tr + sqrt(tr * tr - 4 * det)) / 2, (tr - sqrt(tr * tr - 4 * det)) / 2};
vector<vector<double>> D(2, vector<double>(2, 0));
for (int j = 0; j < 2; j++){
D[j][j] = eigen[j];
}
vector<vector<double>> P(2, vector<double>(2));
for (int j = 0; j < 2; j++){
vector<vector<double>> M2 = M;
for (int k = 0; k < 2; k++){
M2[k][k] -= eigen[j];
}
int p = 0;
if (abs(M2[0][0]) + abs(M2[0][1]) < abs(M2[1][0]) + abs(M2[1][1])){
p = 1;
}
P[0][j] = M2[p][1];
P[1][j] = -M2[p][0];
}
double det2 = P[0][0] * P[1][1] - P[1][0] * P[0][1];
vector<vector<double>> Pinv = P;
swap(Pinv[0][0], Pinv[1][1]);
Pinv[0][1] *= -1;
Pinv[1][0] *= -1;
for (int j = 0; j < 2; j++){
for (int k = 0; k < 2; k++){
Pinv[j][k] /= det2;
}
}
vector<vector<double>> ans(2, vector<double>(2, 0));
for (int j = 0; j < 2; j++){
for (int k = 0; k < 2; k++){
for (int l = 0; l < 2; l++){
for (int m = 0; m < 2; m++){
ans[j][m] += P[j][k] * cbrt(D[k][l]) * Pinv[l][m];
}
}
}
}
for (int j = 0; j < 2; j++){
for (int k = 0; k < 2; k++){
cout << ans[j][k];
if (k < 1){
cout << ' ';
}
}
cout << endl;
}
}
}
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0