結果
問題 |
No.1330 Multiply or Divide
|
ユーザー |
![]() |
提出日時 | 2021-01-09 00:56:30 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 94 ms / 2,000 ms |
コード長 | 950 bytes |
コンパイル時間 | 1,858 ms |
コンパイル使用メモリ | 196,144 KB |
実行使用メモリ | 7,936 KB |
最終ジャッジ日時 | 2025-06-20 01:23:17 |
合計ジャッジ時間 | 4,099 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 51 |
ソースコード
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); long long n,m,p; cin >> n >> m >> p; vector<long long> a(n); vector<long long> cost(n); vector<long long> mul(n); long long amax,rmax; amax = 1; rmax = 1; for (int i=0;i<n;i++) { cin >> a[i]; long long tmp = a[i]; amax = max(amax,tmp); while (tmp%p == 0) { tmp /= p; cost[i]++; } mul[i] = tmp; rmax = max(rmax,mul[i]); } vector<long long> coss(32,0); for (int i=0;i<n;i++) { long long ncos = cost[i]+1; coss[ncos] = max(coss[ncos],mul[i]); } vector<long long> dp(1024,0); dp[0] = 1; for (int i=0;i<1024;i++) { if (i == 1023) { cout << -1 << endl; break; } if (dp[i]*amax > m) { cout << i+1 << endl; break; } for (int j=1;j<32;j++) { if (i+j >= 1024) break; dp[i+j] = max(dp[i+j],dp[i]*coss[j]); } } }