Advertisement
Guest User

Untitled

a guest
Jan 20th, 2020
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.36 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. uint64_t t, n, m, p, mod;
  5. uint64_t a[1210][1210], b[1210][1210], c[1210][1210];
  6. inline uint64_t rit(){
  7. uint64_t res = 0;
  8. char c = getchar();
  9. while(!isdigit(c)) c = getchar();
  10. while(isdigit(c)) res = (res << 1) + (res << 3) + c - '0' , c = getchar();
  11. return res;
  12. }
  13. int main() {
  14. t = rit();
  15. while (t --) {
  16. n = rit(), m = rit(), p = rit(), mod = rit();
  17. for (int i = 0; i < n; ++ i)
  18. for (int j = 0; j < m; ++ j)
  19. a[i][j] = rit() % mod;
  20. for (int i = 0; i < m; ++ i)
  21. for (int j = 0; j < p; ++ j)
  22. b[i][j] = rit() % mod;
  23.  
  24. for (int i = 0; i < n; ++ i)
  25. for (int j = 0; j < p; ++ j)
  26. c[i][j] = 0;
  27.  
  28. for (int i = 0; i < n; ++ i) {
  29. for (int k = 0; k < p; ++ k) {
  30. for (int j = 0; j < m; ++ j) {
  31. uint64_t tmp = a[i][k] * b[k][j] -
  32. (uint64_t)((long double)a[i][k] * b[k][j] / mod) * mod;
  33. c[i][j] += tmp;
  34. if (c[i][j] >= mod) c[i][j] -= mod;
  35. }
  36. }
  37. }
  38.  
  39. for (int i = 0; i < n; ++ i)
  40. for (int j = 0; j < p; ++ j)
  41. printf("%llu%c", c[i][j], " \n"[j + 1 == p]);
  42. }
  43. return 0;
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement