Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //#include<bits/stdc++.h>
- #include<iostream>
- #include<fstream>
- #include<vector>
- #include<algorithm>
- #define long long long
- #define nln '\n'
- const long N = 1e6+10, M = 3*1e3+10;
- using namespace std;
- // Global variables: n, a, c
- long n, m;
- vector<long> a, c;
- void data()
- {
- cin >> n >> m;
- vector<long> tem;
- for (long i = 0; i != n; ++i)
- {
- long x;
- cin >> x;
- x %= m;
- tem.push_back(x);
- }
- sort(tem.begin(), tem.end());
- for (long i = 0; i != n ; ++i)
- {
- if (i == 0 || tem[i] != a.back())
- {
- a.push_back(tem[i]);
- c.push_back(1);
- }
- else
- ++c.back();
- }
- n = a.size();
- }
- void process()
- {
- vector<vector<long>> dp(3, vector<long>(m));
- for (long i = 0; i != n; ++i)
- dp[0][a[i]] = c[i];
- for (long i = 0; i != 2; ++i)
- for (long j = 0; j != m; ++j)
- for (long k = 0; k != n; ++k)
- dp[i+1][(j*a[k])%m] += dp[i][j]*c[k];
- cout << dp[2][0] << nln;
- }
- int main()
- {
- data();
- process();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment