結果
| 問題 |
No.12 限定された素数
|
| コンテスト | |
| ユーザー |
srjywrdnprkt
|
| 提出日時 | 2022-12-19 12:59:26 |
| 言語 | C++17(clang) (17.0.6 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,479 bytes |
| コンパイル時間 | 1,641 ms |
| コンパイル使用メモリ | 149,096 KB |
| 実行使用メモリ | 6,068 KB |
| 最終ジャッジ日時 | 2024-11-18 00:55:25 |
| 合計ジャッジ時間 | 9,147 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 19 WA * 7 |
ソースコード
#include <iostream>
#include <vector>
#include <cmath>
#include <map>
#include <set>
#include <iomanip>
#include <queue>
#include <algorithm>
#include <numeric>
using namespace std;
vector<bool> prime;
vector<int> p;
//O(NloglogN)
void erat(long long N){
prime.resize(N+1, 1);
prime[0] = 0;
prime[1] = 0;
for (long long i=2; i*i<=N; i++){
if (prime[i]){
for (long long j=i*2; j <= N; j+=i){
prime[j] = 0;
}
}
}
}
map<int, int> mp;
set<int> st;
void update(int X, int p){
set<int> st2;
while(X != 0){
st2.insert(X%10);
X /= 10;
}
for (auto x : st2){
if (p == 1) mp[x]++;
else mp[x]--;
}
}
bool check(){
for (int i=0; i<=9; i++){
if (!st.count(i) && mp[i] > 0) return 0;
}
return 1;
}
int main(){
int N, M, A, l=0, a, b, ans=-1;
cin >> N;
erat(5000000);
for (int i=1; i<=5000000; i++){
if (prime[i]) p.push_back(i);
}
for (int i=0; i<N; i++){
cin >> A;
st.insert(A);
}
M = p.size();
for (int r=0; r<M; r++){
update(p[r], 1);
while(l<r && !check()){
update(p[l], 0);
l++;
}
if (check()){
if (l==0) a = 1;
else a = p[l-1]+1;
if (r==M-1) b = 5000000;
else b = p[r+1]-1;
ans = max(ans, b-a);
}
}
cout << ans << endl;
return 0;
}
srjywrdnprkt