結果
| 問題 |
No.6 使いものにならないハッシュ
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-08-18 14:49:20 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 9 ms / 5,000 ms |
| コード長 | 1,128 bytes |
| コンパイル時間 | 1,519 ms |
| コンパイル使用メモリ | 169,200 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-09-16 16:29:01 |
| 合計ジャッジ時間 | 2,520 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 32 |
ソースコード
#include <bits/stdc++.h>
#define rep(i, a) for (int i = 0; i < (a); i++)
#define rep2(i, a, b) for (int i = (a); i < (b); i++)
#define repr(i, a) for (int i = (a) - 1; i >= 0; i--)
#define repr2(i, a, b) for (int i = (b) - 1; i >= (a); i--)
using namespace std;
typedef long long ll;
const ll inf = 1e9;
const ll mod = 1e9 + 7;
int K, N;
const int maxn = 1e6;
bool isprime[maxn];
vector<int> prime;
vector<int> h;
int f(int n) {
return 1 + (n - 1) % 9;
}
void sieve() {
fill(isprime, isprime + maxn, true);
for (ll i = 2; i < maxn; i++) {
if (isprime[i]) {
prime.push_back(i);
h.push_back(f(i));
for (ll j = i * i; j < maxn; j += i) {
isprime[j] = false;
}
}
}
}
int main() {
sieve();
int K, N;
cin >> K >> N;
K = lower_bound(prime.begin(), prime.end(), K) - prime.begin();
N = upper_bound(prime.begin(), prime.end(), N) - prime.begin();
int r = K;
set<int> s;
pair<int, int> ans(-1, 0);
rep2 (i, K, N) {
while (r < N && !s.count(h[r])) {
s.insert(h[r]);
r++;
}
ans = max(ans, make_pair((int)s.size(), prime[i]));
s.erase(h[i]);
}
cout << ans.second << endl;
return 0;
}