[MATEXP] 왜 오답처리가 되는지 모르겠습니다.. ycs1008 아래는 소스코드 입니다. #include <stdio.h> #include <memory.h> #define MAX_SIZE 100 void divide(int(*a)[MAX_SIZE], int n, int p); void mul(int(*a)[MAX_SIZE], int(*b)[MAX_SIZE], int n); int m[MAX_SIZE][MAX_SIZE]; int temp[MAX_SIZE][MAX_SIZE]; int temp1[MAX_SIZE][MAX_SIZE]; int main(void) { int C, N[100], p; int i, j, k; int t[20][MAX_SIZE][MAX_SIZE]; scanf("%d", &C); for (k = 0; k < C; k++){ scanf("%d %d", &N[k], &p); for (i = 0; i < N[k]; i++) for (j = 0; j < N[k]; j++){ scanf("%d", &m[i][j]); } memcpy(temp1, m, sizeof(temp1)); divide(m, N[k], p); memcpy(t[k], m, sizeof(t[k])); } for (k = 0; k < C; k++) for (i = 0; i < N[k]; i++){ for (j = 0; j < N[k]; j++) printf("%d ", t[k][i][j]); printf("\n"); } return 0; } void mul(int (*a)[MAX_SIZE], int (*b)[MAX_SIZE], int n) { int i, j, k, t=0; for (j = 0; j < n; j++){ for (i = 0; i < n; i++){ for (k = 0; k < n; k++){ t += (a[j][k] * b[k][i]); } temp[j][i] = t % 10007; t = 0; } } memcpy(a, temp, sizeof(temp)); } void divide(int (*a)[MAX_SIZE], int n, int p) { if (p == 1) return; if (p == 2){ mul(a, a, n); return; } if (p & 0x00000001){ divide(a, n, (p)>>1); mul(a, a, n); mul(a, temp1, n); } else{ divide(a, n, p>>1); mul(a, a, n); } } 9년 전
2개의 댓글이 있습니다. JongMan mul()에서 오버플로우에 유의하세요. 9년 전 link ycs1008 감사합니다.. 조심해야겠다고 생각한곳인데 까먹고있었네요 ㅠㅠ 9년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
ycs1008
아래는 소스코드 입니다.
9년 전