結果

問題 No.917 Make One With GCD
ユーザー IKyopro
提出日時 2019-10-25 23:58:54
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 3 ms / 2,000 ms
コード長 613 bytes
コンパイル時間 950 ms
コンパイル使用メモリ 84,180 KB
最終ジャッジ日時 2025-01-08 01:48:08
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 32
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <iostream>
#include <vector>
#include <map>
using namespace std;
typedef long long ll;

int gcd(int n,int m){
    if(n%m) return gcd(m,n%m);
    else return m;
}

int main(){
    int N;
    cin >> N;
    vector<int> A(N+1);
    for(int i=1;i<=N;i++){
        cin >> A[i];
    }
    map<int,ll> dp[N+1];
    dp[1][A[1]] = 1;
    for(int i=2;i<=N;i++){
        for(int j=1;j<i;j++){
            for(auto x:dp[j]){
                dp[i][gcd(A[i],x.first)] += x.second;
            }
        }
        dp[i][A[i]]++;
    }
    ll ans = 0;
    for(int i=1;i<=N;i++) ans += dp[i][1];
    cout << ans << endl;
}
0