Advertisement
ivnikkk

Untitled

May 18th, 2022
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.13 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #define debug(l) cerr<<#l<<' '<<l<<'\n';
  3. #include "bits/stdc++.h"
  4. using namespace std;
  5. #define all(a) a.begin(), a.end()
  6. typedef int ll;
  7. typedef pair<ll, ll> pll;
  8. typedef long double ld;
  9. //struct Centroid_decomposition {
  10. //  vector<ll> tree, siz;
  11. //  vector<bool> used;
  12. //  vector<vector<ll>> gr;
  13. //  ll root = -1;
  14. //  Centroid_decomposition(ll n, vector<vector<ll>>& g) {
  15. //      tree.resize(n);
  16. //      siz.resize(n);
  17. //      used.resize(n);
  18. //      gr = g;
  19. //  }
  20. //  void sizes(ll v, ll p) {
  21. //      siz[v] = 1;
  22. //      for (ll& u : gr[v]) {
  23. //          if (u != p && !used[u]) {
  24. //              sizes(u, v);
  25. //              siz[v] += siz[u];
  26. //          }
  27. //      }
  28. //  }
  29. //  ll centroid(ll v, ll p, ll s) {
  30. //      for (ll& u : gr[v]) {
  31. //          if (u != p && !used[u] && siz[u] > s / 2) {
  32. //              return centroid(u, v, s);
  33. //          }
  34. //      }
  35. //      return v;
  36. //  }
  37. //  void build(ll v, ll p) {
  38. //      sizes(v, -1);
  39. //      used[v] = 1;
  40. //      tree[v] = p;
  41. //      for (ll& u : gr[v]) {
  42. //          if (!used[u]) {
  43. //              build(centroid(u, -1, siz[u]), v);
  44. //          }
  45. //      }
  46. //  }
  47. //  void build_tree() {
  48. //      ll v = 0;
  49. //      sizes(v, -1);
  50. //      build(centroid(v, -1, siz[v]), -1);
  51. //      gr.clear();
  52. //      gr.resize(tree.size());
  53. //      used.clear();
  54. //      siz.clear();
  55. //      for (ll v = 0; v < (ll)tree.size(); v++) {
  56. //          if (tree[v] == -1) {
  57. //              root = v;
  58. //              continue;
  59. //          }
  60. //          gr[v].push_back(tree[v]);
  61. //          gr[tree[v]].push_back(v);
  62. //      }
  63. //  }
  64. //};
  65. //const ll LG = 17;
  66. //const ll N = 1e5 + 1;
  67. //ll up[LG][N], d[N];
  68. //ll t = 0;
  69. //vector<vector<ll>> g;
  70. //vector<ll> clr;
  71. //
  72. //void dfs(ll v, ll p) {
  73. //  if (p == -1) {
  74. //      d[v] = 0;
  75. //      up[0][v] = 0;
  76. //  }
  77. //  else {
  78. //      d[v] = d[p] + 1;
  79. //  }
  80. //  for (ll l = 1; l < LG; l++) {
  81. //      up[l][v] = up[l - 1][up[l - 1][v]];
  82. //  }
  83. //  for (ll& u : g[v]) {
  84. //      if (u != p) {
  85. //          up[0][u] = v;
  86. //          dfs(u, v);
  87. //      }
  88. //  }
  89. //}
  90. //ll get_lca(ll a, ll b) {
  91. //  if (a == b)return a;
  92. //  if (d[b] > d[a])swap(a, b);
  93. //  for (ll i = LG - 1; i >= 0; i--) {
  94. //      if (d[up[i][a]] >= d[b]) a = up[i][a];
  95. //  }
  96. //  if (a == b) return a;
  97. //  for (ll i = LG - 1; i >= 0; i--) {
  98. //      if (up[i][a] != up[i][b]) a = up[i][a], b = up[i][b];
  99. //  }
  100. //  return up[0][a];
  101. //}
  102. //ll get_dist(ll a, ll b) {
  103. //  ll lca = get_lca(a, b);
  104. //  return d[b] + d[a] - 2 * d[lca];
  105. //}
  106. //struct Node {
  107. //  // color dists to vertex with key color
  108. //  map<ll,multiset<ll>> colors;
  109. //};
  110. //struct Node_help {
  111. //  // color -  num_vertex
  112. //   vector<pll> colors;
  113. //};
  114. //vector<Node_help> centroid_build_vertex;
  115. //vector<Node> centroid_vertex;
  116. //void dfs_build_distance(ll v, ll p, vector<vector<ll>> &centroid_tree) {
  117. //  centroid_build_vertex[v].colors.push_back({ clr[v],v });
  118. //  centroid_vertex[v].colors[clr[v]].insert(0);
  119. //  for (ll& u : centroid_tree[v]) {
  120. //      if (u == p)continue;
  121. //      dfs_build_distance(u, v, centroid_tree);
  122. //      if ((ll)centroid_build_vertex[v].colors.size() < centroid_build_vertex[u].colors.size()) {
  123. //          centroid_build_vertex[v].colors.swap(centroid_build_vertex[u].colors);
  124. //      }
  125. //      for (pll& i : centroid_build_vertex[u].colors) {
  126. //          centroid_build_vertex[v].colors.push_back(i);
  127. //      }
  128. //      //centroid_build_vertex[u].colors.clear();
  129. //  }
  130. //  for (pll& i : centroid_build_vertex[v].colors) {
  131. //      centroid_vertex[v].colors[i.first].insert(get_dist(i.second, v));
  132. //  }
  133. //}
  134. signed main() {
  135. #ifdef _DEBUG
  136.     freopen("input.txt", "r", stdin);
  137.     freopen("output.txt", "w", stdout);
  138. #endif
  139.     ios_base::sync_with_stdio(false);
  140.     cin.tie(nullptr);
  141.     cout.tie(nullptr);
  142.     ll n;
  143.     cin >> n;
  144.     vector<ll> a(n);
  145.     for (ll i = 0; i < n; i++) {
  146.         cin >> a[i];
  147.     }
  148.     vector<ll> cnt(1000);
  149.     cnt[0] = 1;
  150.     ll ans = 0, sum1 = 0, sum2 = 0;
  151.     for (ll i = 0; i < n; i++) {
  152.         sum2 += a[i];
  153.         sum2 %= 999;
  154.         ll j = i - 100;
  155.         if (j >= 0) {
  156.             sum1 += a[j];
  157.             sum1 %= 999;
  158.             cnt[sum1]++;
  159.             ans += cnt[sum2];
  160.         }
  161.     }
  162.     cout << ans - 1;
  163.  
  164.     //ll n;
  165.     //cin >> n;
  166.     //g.resize(n);
  167.     //clr.resize(n);
  168.     //for (ll i = 0; i < n - 1; i++) {
  169.     //  ll x;
  170.     //  cin >> x;
  171.     //  g[x].push_back(i + 1);
  172.     //  g[i+1].push_back(x);
  173.     //}
  174.     //for (ll i = 0; i < n; i++) {
  175.     //  cin >> clr[i];
  176.     //}
  177.     //dfs(0, -1);
  178.     //centroid_vertex.resize(n);
  179.     //centroid_build_vertex.resize(n);
  180.     //Centroid_decomposition U(n, g);
  181.     //U.build_tree();
  182.     //dfs_build_distance(U.root, -1, U.gr);
  183.     //for (ll i = 0; i < U.tree.size(); i++) {
  184.     //  cout << U.tree[i] << ' ';
  185.     //}
  186.     //cout << '\n';
  187.     //for (ll i = 0; i < n; i++) {
  188.     //  cout << i << " :\n";
  189.     //  for (pll& j : centroid_build_vertex[i].colors) {
  190.     //      cout << j.second << "    " << j.first << " dist  :" << get_dist(j.second, i) << '\n';
  191.     //  }
  192.     //  cout << "colors\n";
  193.     //  for (auto it : centroid_vertex[i]) {
  194.     //      cout << it.first << ' ';
  195.     //      cout
  196.     //  }
  197.     //  cout << '\n' << '\n';
  198.     //}
  199.     //ll q;
  200.     //cin >> q;
  201.     //ll Node_cent_tree = U.root;
  202.     //while (q--) {
  203.     //  ll v, c;
  204.     //  cin >> v >> c;
  205.     //  ll it = v;
  206.     //  ll ans = INT_MAX;
  207.     //  while (U.tree[it] != -1) {
  208.     //      if (!centroid_vertex[it].colors[c].empty()) {
  209.     //          auto x = *centroid_vertex[it].colors[c].begin();
  210.     //          ans = min(ans, x + get_dist(v, it));
  211.     //      }
  212.     //      it = U.tree[it];
  213.     //  }
  214.     //  /*if (ans == INT_MAX) {
  215.     //      cout << -1 << '\n';
  216.     //  }
  217.     //  else {
  218.     //      cout << ans << '\n';
  219.     //  }*/
  220.     //}
  221. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement