結果

問題 No.1731 Product of Subsequence
ユーザー ooaiu
提出日時 2025-05-03 18:02:50
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 1,374 bytes
コンパイル時間 4,094 ms
コンパイル使用メモリ 294,232 KB
実行使用メモリ 7,844 KB
最終ジャッジ日時 2025-05-03 18:03:04
合計ジャッジ時間 13,124 ms
ジャッジサーバーID
(参考情報)
judge5 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 27 WA * 4
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
std::vector<std::pair<long long, int>> factor(unsigned long long x) {
    std::vector<std::pair<long long, int>> ret;
    if (x % 2 == 0) {
        for (ret.push_back({2, 0}); x % 2 == 0; x /= 2) ret.back().second++;
    }
    for (long long p = 3; p * p <= x; p += 2) {
        if (x % p == 0) {
            for (ret.push_back({p, 0}); x % p == 0; x /= p) ret.back().second++;
        }
    }
    if (x != 1) ret.push_back({x, 1});
    return ret;
}
const int md = (int)1e9 + 7;
int N, K;
int main() {
	std::ios_base::sync_with_stdio(false);
	std::cin.tie(nullptr);
	cin >> N >> K;
	auto d = factor(K);
	vector<vector<int>> A(N);
	for(int i = 0; i < N; i++) {
		ll a;
		cin >> a;
		vector<int> B(d.size());
		for(int j = 0; j < d.size(); j++) {
			while(a % d[j].first == 0) {
				B[j] += 1;
				a /= d[j].first;
			}
		}
		A[i] = B;
	}
	map<vector<int>, int> dp;
	dp[vector<int>(d.size())] = 1;
	
	for(int i = 0; i < N; i++) {
		map<vector<int>, int> ndp = dp;
		for(const auto&[ps, val]: dp) {
			auto ns = ps;
			for(int j = 0; j < d.size(); j++) {
				ns[j] += A[i][j];
				ns[j] = min(ns[j], (int)d[j].second);
			}
			ndp[ns] += val;
			ndp[ns] %= md;
		}
		swap(dp, ndp);
	}
	vector<int> s(d.size());
	for(int i = 0; i < d.size(); i++) s[i] = d[i].second;
	int ans = dp[s];
	cout << ans << "\n";
}
0