結果
| 問題 |
No.12 限定された素数
|
| コンテスト | |
| ユーザー |
h_noson
|
| 提出日時 | 2016-06-17 12:07:28 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 55 ms / 5,000 ms |
| コード長 | 1,680 bytes |
| コンパイル時間 | 528 ms |
| コンパイル使用メモリ | 65,496 KB |
| 実行使用メモリ | 8,320 KB |
| 最終ジャッジ日時 | 2024-11-24 08:54:42 |
| 合計ジャッジ時間 | 2,839 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 26 |
ソースコード
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
#define REP(i,s,e) for (i = s; i <= e; i++)
#define rep(i,n) REP (i,0,(int)(n)-1)
#define RREP(i,s,e) for (i = s; i >= e; i--)
#define rrep(i,n) RREP (i,(int)(n)-1,0)
#define INF (int)1e8
#define MOD (int)(1e9+7)
typedef long long ll;
bool prime[5000001];
int main(void) {
int i, j;
for (i = 2; i <= 5000000; i++) prime[i] = true;
for (i = 2; i * i <= 5000000; i++) if (prime[i]) {
for (j = i*2; j <= 5000000; j+=i)
prime[j] = false;
}
int n;
int req = 0;
cin >> n;
rep (i,n) {
int a;
cin >> a;
req |= 1<<a;
}
int nums[10] {};
int l, r;
int ans = -1;
l = 1; r = 2;
while (r <= 5000000) {
int x = r;
while (x) {
nums[x%10]++;
x /= 10;
}
do {
r++;
} while (!prime[r] && r <= 5000000);
r--;
while (l <= r) {
bool ok = true;
rep (i,10) {
if ((req & 1<<i) && nums[i] == 0)
break;
else if ((req & 1 << i) == 0 && nums[i] > 0)
ok = false;
}
if (i < 10) break;
if (!ok) {
while (!prime[l] && l <= 5000001) l++;
int x = l;
while (x) {
nums[x%10]--;
x /= 10;
}
l++;
}
else {
ans = max(r - l, ans);
break;
}
}
r++;
}
cout << ans << endl;
return 0;
}
h_noson