Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- uint64_t t, n, m, p, mod;
- uint64_t a[1210][1210], b[1210][1210], c[1210][1210];
- inline uint64_t rit(){
- uint64_t res = 0;
- char c = getchar();
- while(!isdigit(c)) c = getchar();
- while(isdigit(c)) res = (res << 1) + (res << 3) + c - '0' , c = getchar();
- return res;
- }
- int main() {
- t = rit();
- while (t --) {
- n = rit(), m = rit(), p = rit(), mod = rit();
- for (int i = 0; i < n; ++ i)
- for (int j = 0; j < m; ++ j)
- a[i][j] = rit() % mod;
- for (int i = 0; i < m; ++ i)
- for (int j = 0; j < p; ++ j)
- b[i][j] = rit() % mod;
- for (int i = 0; i < n; ++ i)
- for (int j = 0; j < p; ++ j)
- c[i][j] = 0;
- for (int i = 0; i < n; ++ i) {
- for (int k = 0; k < p; ++ k) {
- for (int j = 0; j < m; ++ j) {
- uint64_t tmp = a[i][k] * b[k][j] -
- (uint64_t)((long double)a[i][k] * b[k][j] / mod) * mod;
- c[i][j] += tmp;
- if (c[i][j] >= mod) c[i][j] -= mod;
- }
- }
- }
- for (int i = 0; i < n; ++ i)
- for (int j = 0; j < p; ++ j)
- printf("%llu%c", c[i][j], " \n"[j + 1 == p]);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement