AOJ 0241 Quaternion Multiplication

問題文

Quaternion Multiplication

感想

うまく実装してくださいっての好き。

解法

やるだけだが、上手いやり方を思いつかなきゃいけないあたり好き。普通に手計算したりするのはちょっと恐すぎるし、それで泥沼にはまったら予選落ちメニーチャンシーズなので僕は手計算とかしません。

ソース

係数テーブルともうひとつ作った。

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <cmath>
using namespace std;
 
int coef[4][4] = {
    {1,1,1,1},
    {1,-1,1,-1},
    {1,-1,-1,1},
    {1,1,-1,-1}
};
 
int to[4][4] = {
    {0,1,2,3},
    {1,0,3,2},
    {2,3,0,1},
    {3,2,1,0}
};
 
vector<int> calc(vector<int> A,vector<int> B){
    vector<int> answer(4);
    for(int i = 0 ; i < 4 ; i++)
        for(int j = 0 ; j < 4 ; j++)
            answer[to[i][j]] += A[i] * B[j] * coef[i][j];
    return answer;
}
 
int main(){
    int n;
    while(cin >> n && n){
        vector<int> A(4);
        vector<int> B(4);
        for(int i = 0 ; i < n ; i++){
            for(int j = 0 ; j < 4 ; j++) cin >> A[j];
            for(int j = 0 ; j < 4 ; j++) cin >> B[j];
            vector<int> answer = calc(A,B);
            for(int j = 0 ; j < 4 ; j++)
                cout << (j?" ":"") << answer[j];
            cout << endl;
        }
    }
}