結果

問題 No.1331 Moving Penguin
ユーザー Example0911Example0911
提出日時 2021-01-09 11:11:47
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 912 ms / 1,500 ms
コード長 738 bytes
コンパイル時間 2,167 ms
コンパイル使用メモリ 198,932 KB
最終ジャッジ日時 2025-01-17 15:20:34
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 49
権限があれば一括ダウンロードができます

ソースコード

diff #

#include "bits/stdc++.h"
using namespace std;
using ll = long long;
using P = pair<ll, ll>;
const ll INF = (1LL << 61);
ll mod = (ll)1e9 + 7;


signed main() {
	ll N; cin >> N;
	vector<ll>A(N); for (int i = 0; i < N; i++)cin >> A[i];
	ll sN = sqrt(N);
	vector<vector<ll>>sum(sN + 1, vector<ll>(sN + 1));
	vector<ll>dp(N);
	dp[0] = 1;
	for (int i = 0; i < N; i++) {
		if (i > 0 && A[i - 1] != 1) {
			dp[i] += dp[i - 1]; dp[i] %= mod;
		}
		for (int j = 1; j <= sN; j++) {
			dp[i] += sum[j][i%j]; dp[i] %= mod;
		}
		if (A[i] < sN) {
			sum[A[i]][i % A[i]] += dp[i];
			sum[A[i]][i % A[i]] %= mod;
		}
		else {
			for (ll j = i + A[i]; j < N; j += A[i]) {
				dp[j] += dp[i];
				dp[j] %= mod;
			}
		}
		
	}
	cout << dp[N - 1] << endl;
}
0