結果
問題 | No.473 和と積の和 |
ユーザー |
![]() |
提出日時 | 2018-09-22 15:05:31 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 68 ms / 3,000 ms |
コード長 | 849 bytes |
コンパイル時間 | 779 ms |
コンパイル使用メモリ | 98,888 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-07-18 08:57:18 |
合計ジャッジ時間 | 2,140 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 43 |
ソースコード
#include <cstdio>#include <cstring>#include <iostream>#include <string>#include <cmath>#include <bitset>#include <vector>#include <map>#include <set>#include <queue>#include <deque>#include <algorithm>#include <unordered_map>using namespace std;typedef long long int ll;typedef pair<int, int> P;int main(){int n;int x;vector<int> dv;cin>>n>>x;x++;for(int i=1; i*i<=x; i++){if(x%i!=0) continue;dv.push_back(i);if(i*i<x) dv.push_back(x/i);}sort(dv.begin(), dv.end());unordered_map<int, int> mp;for(int i=0; i<dv.size(); i++){mp[dv[i]]=i;}int dp[101][1350]={};dp[0][0]=1;for(int i=1; i<dv.size(); i++){for(int j=1; j<dv.size(); j++){if(dv[j]%dv[i]!=0) continue;for(int k=1; k<=n; k++){dp[k][j]+=dp[k-1][mp[dv[j]/dv[i]]];}}}cout<<dp[n][dv.size()-1]<<endl;return 0;}