結果
| 問題 |
No.12 限定された素数
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-03-26 15:50:08 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 916 ms / 5,000 ms |
| コード長 | 1,809 bytes |
| コンパイル時間 | 292 ms |
| コンパイル使用メモリ | 82,232 KB |
| 実行使用メモリ | 240,052 KB |
| 最終ジャッジ日時 | 2025-03-26 15:50:52 |
| 合計ジャッジ時間 | 23,909 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 26 |
ソースコード
from bisect import bisect_left, bisect_right
def main():
import sys
input = sys.stdin.read().split()
idx = 0
N = int(input[idx])
idx += 1
A = input[idx:idx+N]
s_set = set(A)
sieve_limit = 5000000
primes = []
sieve = [True] * (sieve_limit + 1)
sieve[0] = sieve[1] = False
for i in range(2, int(sieve_limit**0.5) + 1):
if sieve[i]:
sieve[i*i::i] = [False] * len(sieve[i*i::i])
for i in range(sieve_limit + 1):
if sieve[i]:
primes.append(i)
valid_primes = []
invalid_primes = []
for p in primes:
p_str = str(p)
valid = True
for c in p_str:
if c not in s_set:
valid = False
break
if valid:
valid_primes.append(p)
else:
invalid_primes.append(p)
invalid_primes = [0] + invalid_primes + [5000001]
valid_primes.sort()
s = set(s_set)
max_diff = -1
for i in range(len(invalid_primes) - 1):
prev = invalid_primes[i]
next_ = invalid_primes[i+1]
a = prev + 1
b = next_ - 1
if a > b:
continue
left = bisect_left(valid_primes, a)
right = bisect_right(valid_primes, b)
primes_in_range = valid_primes[left:right]
if not primes_in_range:
continue
current_digits = set()
for p in primes_in_range:
current_digits.update(str(p))
if len(current_digits) == len(s):
break
if current_digits == s:
current_diff = b - a
if current_diff > max_diff:
max_diff = current_diff
print(max_diff if max_diff != -1 else -1)
if __name__ == "__main__":
main()
lam6er