結果
| 問題 |
No.979 Longest Divisor Sequence
|
| ユーザー |
siman
|
| 提出日時 | 2023-01-11 10:54:01 |
| 言語 | C++17(clang) (17.0.6 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 113 ms / 2,000 ms |
| コード長 | 1,105 bytes |
| コンパイル時間 | 1,413 ms |
| コンパイル使用メモリ | 141,816 KB |
| 実行使用メモリ | 6,912 KB |
| 最終ジャッジ日時 | 2024-12-22 01:57:26 |
| 合計ジャッジ時間 | 2,304 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 16 |
ソースコード
#include <cassert>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <climits>
#include <map>
#include <queue>
#include <set>
#include <cstring>
#include <vector>
using namespace std;
typedef long long ll;
int main() {
int N;
cin >> N;
int A[N];
int A_max = 0;
int remain_counter[300010];
memset(remain_counter, 0, sizeof(remain_counter));
for (int i = 0; i < N; ++i) {
cin >> A[i];
A_max = max(A_max, A[i]);
remain_counter[A[i]]++;
}
int counter[300010];
memset(counter, 0, sizeof(counter));
bool checked[300010];
memset(checked, false, sizeof(checked));
int ans = 1;
for (int i = 0; i <= A_max; ++i) {
counter[i] = 1;
}
for (int i = 0; i < N; ++i) {
int a = A[i];
remain_counter[a]--;
// if (checked[a]) continue;
checked[a] = true;
int j = 2;
while (a * j <= A_max) {
int v = a * j;
if (remain_counter[v] > 0) {
counter[v] = max(counter[v], counter[a] + 1);
ans = max(ans, counter[v]);
}
j += 1;
}
}
cout << ans << endl;
return 0;
}
siman