답안 #9797

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
9797 2014-09-28T08:59:06 Z maniac Quaternion inverse (kriii2_Q) C++
1 / 4
1000 ms 1244 KB
#include <cstdio>

int d[10][10][10][10][4];


bool can( int a1, int b1, int c1, int d1, int a2, int b2, int c2, int d2, int M ){

	int m = M*M;
	if( (a1*a2 + m - (b1*b2)%m + m - (c1*c2)%m + m - (d1*d2)%m )%M != 1 ) return 0;
	//printf("%d\n", (a1*b2 + b1*a2 +c1*d2 + m -(d1*c2)%M )%M);
	if( (a1*b2 + b1*a2 +c1*d2 + m -(d1*c2)%M )%M != 0 ) return 0;
	if( (a1*c2 + m - (b1*d2)%m + c1*a2 + d1*b2)%M != 0 ) return 0;
	if( (a1*d2 + b1*c2 + m - (c1*b2)%m + d1*a2 )%M != 0 ) return 0;

	return 1;

}

void go( int a, int b, int c, int d1, int m ){
	for(int i=0; i<m; i++){
		for(int j=0; j<m; j++){
			for(int k=0; k<m; k++){
				for(int r=0; r<m; r++){
					if( can( a, b, c, d1, i, j, k, r, m ) ) {
						d[a][b][c][d1][0] = i;
						d[a][b][c][d1][1] = j;
						d[a][b][c][d1][2] = k;
						d[a][b][c][d1][3] = r;
					}
				}
			}
		}
	}

}

			


int main(){
	int m, t;
	scanf("%d %d", &m, &t);
	
	for(int i=0; i<m; i++){
		for(int j=0; j<m; j++){
			for(int k=0; k<m; k++){
				for(int r=0; r<m; r++){
					go( i, j, k, r, m );
				}
			}
		}
	}
	//printf("%d\n", can( 2, 3, 2, 1, 4, 4, 1, 3, m ));
	while( t-- ){
		int a1, b1, c1, d1;
		scanf("%d %d %d %d", &a1, &b1, &c1, &d1);
		
		for(int i=0; i<4; i++)
			printf("%d ", d[a1][b1][c1][d1][i] );
		puts("");
	}

}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 1244 KB Output is correct
2 Correct 0 ms 1244 KB Output is correct
3 Correct 12 ms 1244 KB Output is correct
4 Correct 148 ms 1244 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1000 ms 1240 KB Program timed out
2 Halted 0 ms 0 KB -