結果
| 問題 |
No.2709 1975 Powers
|
| コンテスト | |
| ユーザー |
shinchan
|
| 提出日時 | 2024-03-31 13:45:01 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 1,050 ms / 2,000 ms |
| コード長 | 1,825 bytes |
| コンパイル時間 | 1,825 ms |
| コンパイル使用メモリ | 204,340 KB |
| 最終ジャッジ日時 | 2025-02-20 16:31:31 |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 25 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
#define all(v) (v).begin(),(v).end()
#define pb(a) push_back(a)
#define rep(i, n) for(int i=0;i<n;i++)
#define foa(e, v) for(auto&& e : v)
using ll = long long;
const ll MOD7 = 1000000007, MOD998 = 998244353, INF = (1LL << 60);
#define dout(a) cout<<fixed<<setprecision(10)<<a<<endl;
long long modinv(long long a, long long MOD) {
long long b = MOD, u = 1, v = 0;
while (b) {
long long t = a / b;
a -= t * b; std::swap(a, b);
u -= t * v; std::swap(u, v);
}
u %= MOD;
if (u < 0) u += MOD;
return u;
}
long long modpow(long long a, long long n, long long MOD) {
long long res = 1;
a %= MOD;
if(n < 0) {
n = -n;
a = modinv(a, MOD);
}
while (n > 0) {
if (n & 1) res = res * a % MOD;
a = a * a % MOD;
n >>= 1;
}
return res;
}
int main() {
cin.tie(0);
ios::sync_with_stdio(false);
ll n, p, q;
cin >> n >> p >> q;
vector<ll> a(n);
rep(i, n) cin >> a[i];
sort(all(a));
vector<vector<ll>> dp(5, vector<ll> (p, 0));
ll N = 3000000;
vector<ll> pow10(N, 1);
vector<ll> pow9(N, 1);
vector<ll> pow7(N, 1);
vector<ll> pow5(N, 1);
rep(i, N - 1) pow10[i + 1] = pow10[i] * 10 % p;
rep(i, N - 1) pow9[i + 1] = pow9[i] * 9 % p;
rep(i, N - 1) pow7[i + 1] = pow7[i] * 7 % p;
rep(i, N - 1) pow5[i + 1] = pow5[i] * 5 % p;
dp[0][0] = 1;
foa(e, a) {
vector<vector<ll>> nx = dp;
for(int i = 0; i < p; i ++) {
nx[1][(i + pow10[e]) % p] += dp[0][i];
nx[2][(i + pow9[e]) % p] += dp[1][i];
nx[3][(i + pow7[e]) % p] += dp[2][i];
nx[4][(i + pow5[e]) % p] += dp[3][i];
}
swap(nx, dp);
}
cout << dp[4][q] << endl;
return 0;
}
shinchan