結果
| 問題 | No.12 限定された素数 |
| コンテスト | |
| ユーザー |
maine_honzuki
|
| 提出日時 | 2020-05-03 18:35:08 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 156 ms / 5,000 ms |
| コード長 | 1,374 bytes |
| 記録 | |
| コンパイル時間 | 1,749 ms |
| コンパイル使用メモリ | 174,648 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-06-13 04:12:59 |
| 合計ジャッジ時間 | 6,632 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 26 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
std::vector<bool> IsPrime;
void eratosthenes(size_t max_n) {
if (max_n + 1 > IsPrime.size()) {
IsPrime.resize(max_n + 1, true);
}
IsPrime[0] = false;
IsPrime[1] = false;
for (size_t i = 2; i * i <= max_n; i++)
if (IsPrime[i])
for (size_t j = 2; i * j <= max_n; j++)
IsPrime[i * j] = false;
}
int MAX = 5000000;
int main() {
int N, A[11] = {};
cin >> N;
while (N--) {
int a;
cin >> a;
A[a] = 1;
}
int used[11] = {};
auto use = [&](int p, int delta) {
while (p) {
used[p % 10] += delta;
p /= 10;
}
};
eratosthenes(MAX + 10);
int ans = -1;
int k = 1, l = 1;
while (l <= MAX) {
if (IsPrime[l]) {
use(l, 1);
}
for (int d = 0; d < 10; d++) {
if (!A[d]) {
while (used[d]) {
if (IsPrime[k]) {
use(k, -1);
}
k++;
}
}
}
bool flag = true;
for (int d = 0; d < 10; d++) {
if (A[d] && !used[d])
flag = false;
}
if (flag) {
ans = max(ans, l - k);
}
l++;
}
cout << ans << endl;
}
maine_honzuki