fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define LET(x, a) __typeof(a) x(a)
  5. #define TR(v, it) for(LET(it, v.begin()); it != v.end(); it++)
  6. #define si(x) scanf("%d",&x)
  7. #define F first
  8. #define S second
  9. #define PB push_back
  10. #define MP make_pair
  11. #define INF 1000000000
  12. #define MOD 1000000007
  13. #define SET(x,y) memset(x,y,sizeof(x));
  14. #define LL long long int
  15. #define ULL unsigned LL
  16. #define PII pair<int, int>
  17.  
  18. int g[350][350];
  19. int cval[350];
  20. int mp[100000];
  21. int main() {
  22. int i, j, n, m, a, b, k;
  23. LL x;
  24. scanf("%d %d %d %d", &n, &m, &a, &b);
  25. for (i = 0; i < n; i++) {
  26. for (j = 0; j < m; j++) {
  27. scanf("%Ld", &x);
  28. g[i][j] = x % a;
  29. }
  30. }
  31. LL ans = 0;
  32. for (i = 0; i < n; i++) {
  33. memset(cval, 0, sizeof(cval));
  34. for (j = i; j < n; j++) {
  35. mp[0]++;
  36. int psum = 0, val;
  37. for (k = 0; k < m; k++) {
  38. cval[k] += g[j][k];
  39. if (cval[k] >= a)
  40. cval[k] -= a;
  41. psum += cval[k];
  42. if (psum >= a)
  43. psum -= a;
  44. val = psum - b;
  45. if (val < 0)
  46. val += a;
  47. ans += mp[val];
  48. mp[psum]++;
  49. }
  50. mp[0] --;
  51. psum = 0;
  52. for (k = 0; k < m; k++) {
  53. psum += cval[k];
  54. if (psum >= a)
  55. psum -= a;
  56. mp[psum]--;
  57. }
  58.  
  59. }
  60. }
  61. cout << ans << endl;
  62. return 0;
  63. }
  64.  
Success #stdin #stdout 0s 3968KB
stdin
2 2 3 2
2 5    
6 1
stdout
4