結果
| 問題 |
No.12 限定された素数
|
| コンテスト | |
| ユーザー |
cormoran
|
| 提出日時 | 2017-01-10 17:44:03 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 55 ms / 5,000 ms |
| コード長 | 2,124 bytes |
| コンパイル時間 | 745 ms |
| コンパイル使用メモリ | 75,764 KB |
| 実行使用メモリ | 10,364 KB |
| 最終ジャッジ日時 | 2024-11-24 09:01:46 |
| 合計ジャッジ時間 | 3,039 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 26 |
ソースコード
#include <iostream>
#include <vector>
#include <set>
#include <cassert>
using namespace std;
using pii = pair<int,int>;
using ll = long long;
#define rep(i, j) for(int i=0; i < (int)(j); i++)
template<class T> bool set_max(T &a, const T &b) { return a < b ? a = b, true : false; }
// vector
template<class T> istream& operator >> (istream &is , vector<T> &v) { for(T &a : v) is >> a; return is; }
template<class T> ostream& operator << (ostream &os , const vector<T> &v) { for(const T &t : v) os << "\t" << t; return os << endl; }
const int MAX_M = 5000000;
class Solver {
public:
int containing_number(int a) {
int ret = a == 0;
while(a) {
ret = ret | (1 << (a % 10));
a /= 10;
}
return ret;
}
vector<int> calc_primes(int M) {
vector<char> is_prime(M + 1, true);
is_prime[0] = is_prime[1] = false;
rep(i, M + 1) {
if(is_prime[i]) for(int j = i + i; j <= M; j += i) is_prime[j] = false;
}
vector<int> ret;
rep(i, M + 1) if(is_prime[i]) ret.push_back(i);
return ret;
}
bool solve() {
int N; cin >> N;
vector<int> A(N); cin >> A;
vector<int> primes = calc_primes(MAX_M);
// cerr << primes << endl;
int model = 0;
for(int a : A) model = model | containing_number(a);
int ans = -1;
int l = 0;
int now = 0;
rep(r, primes.size()) {
now = now | containing_number(primes[r]);
if(now == model) {
int ll = (l == 0 ? 1 : primes[l - 1] + 1);
int rr = (r + 1 == primes.size() ? MAX_M : primes[r + 1] - 1);
if(set_max(ans, rr - ll)) {
// cerr << rr << " " << ll << endl;
}
}
if((now & ~model) != 0) {
l = r + 1;
now = 0;
}
}
cout << ans << endl;
return 0;
}
};
int main() {
cin.tie(0);
ios::sync_with_stdio(false);
Solver s;
s.solve();
return 0;
}
cormoran