結果
| 問題 |
No.12 限定された素数
|
| コンテスト | |
| ユーザー |
ayame_py
|
| 提出日時 | 2016-01-04 21:05:06 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,782 bytes |
| コンパイル時間 | 1,166 ms |
| コンパイル使用メモリ | 163,368 KB |
| 実行使用メモリ | 24,988 KB |
| 最終ジャッジ日時 | 2024-09-19 11:16:00 |
| 合計ジャッジ時間 | 3,920 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 25 WA * 1 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
#define REP(i, n) for(int i = 0; i < (int)(n); i++)
#define FOR(i,n,m) for (int i=n; i<(int)(m); i++)
#define INF 1000000007
#define pb push_back
vector<int> prime_list;
int notPrime[5000010];
int isOK[10];
int shaku[10];
int cnt[10];
//エラトステネスの篩
void furui(int n){
int i = 2;
prime_list.pb(i);
while(i<n){
//素数の倍数は素数でない
for(int j=0;i*j<n+1;j++) notPrime[i*j]=1;
//次の素数を探索
for(int j=i+1;j<n+1;j++){
if(!notPrime[j]){
i=j;
prime_list.pb(i);
break;
}
if(j==n) i=j;
}
}
}
bool chk(int n){
while(n!=0){
if(!isOK[n%10]) return false;
n/=10;
}
return true;
}
void cnt_n(int n){
while(n!=0){
cnt[n%10]++;
n/=10;
}
}
bool usedAll(){
REP(i,10){
if(isOK[i] && cnt[i]==0) return false;
}
return true;
}
int N;
int main(){
cin >> N;
REP(i,N){
int t;
cin >> t;
isOK[t]=1;
}
prime_list.pb(0);
furui(5000000);
prime_list.pb(5000001);
int prime_num=prime_list.size()-1;
int cntf=0,l=0,r=0;
int ans=-1;
FOR(i,1,prime_num){
if(!cntf){
if(chk(prime_list[i])){
fill(cnt,cnt+10,0);
cnt_n(prime_list[i]);
l=i;
cntf=1;
}
}
else{
if(!chk(prime_list[i])){
if(usedAll()) ans=max(ans,prime_list[i]-1-(prime_list[l-1]+1));
cntf=0;
continue;
}
cnt_n(prime_list[i]);
}
}
cout << ans << endl;
return 0;
}
ayame_py