Advertisement
tuki2501

fcb029_trinnum.cpp

Nov 9th, 2021
903
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.80 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main() {
  5.   // input
  6.   cin.tie(0)->sync_with_stdio(0);
  7.   int n, m;
  8.   cin >> n >> m;
  9.   vector<int> v(n);
  10.   for (auto &i : v) {
  11.     cin >> i;
  12.     i %= m;
  13.   }
  14.   sort(v.begin(), v.end());
  15.   // compress
  16.   vector<int> a, c;
  17.   for (int i = 0; i < n; i++) {
  18.     if (!a.size() || a.back() != v[i]) {
  19.       a.push_back(v[i]);
  20.       c.push_back(1);
  21.     }
  22.     else c.back()++;
  23.   }
  24.   n = a.size();
  25.   // dynamic programing
  26.   vector<vector<long long>> dp(3, vector<long long>(m));
  27.   for (int i = 0; i < n; i++) {
  28.     dp[0][a[i]] = c[i];
  29.   }
  30.   for (int k = 0; k <= 1; k++) {
  31.     for (int j = 0; j < m; j++) {
  32.       for (int i = 0; i < n; i++) {
  33.         dp[k + 1][(j * a[i]) % m] += dp[k][j] * c[i];
  34.       }
  35.     }
  36.   }
  37.   cout << dp[2][0] << '\n';
  38. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement