結果
問題 | No.6 使いものにならないハッシュ |
ユーザー |
|
提出日時 | 2025-06-27 09:19:04 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 6 ms / 5,000 ms |
コード長 | 1,398 bytes |
コンパイル時間 | 3,606 ms |
コンパイル使用メモリ | 286,684 KB |
実行使用メモリ | 7,844 KB |
最終ジャッジ日時 | 2025-06-27 09:19:10 |
合計ジャッジ時間 | 5,340 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 32 |
ソースコード
#include <bits/stdc++.h> using namespace std; vector<bool> eratosthenes (int n) { vector<bool> flags(n,true); flags.at(0) = false; flags.at(1) = false; for (int i=2; i*i<n; i++) { if (!flags.at(i)) continue; for (int j=i*i; j<n; j+=i) { flags.at(j)= false; } } return flags; } int digit_sum (int n) { if (n<10) return n; int sum = 0; while (n>0) { sum += n%10; n /= 10; } return digit_sum(sum); } /////////////////// メイン /////////////////// int main () { //////////////////// 入力 //////////////////// int k, n; cin >> k >> n; //////////////// 出力変数定義 //////////////// int result = 0; //////////////////// 処理 //////////////////// vector<bool> primes = eratosthenes(n+1); vector<pair<int,int>> hashes; for (int i=k; i<=n; i++) { if (primes.at(i)) hashes.emplace_back(i,digit_sum(i)); } unordered_set<int> s; int l = 0; int max_len = 0; int length = hashes.size(); for (int r=0; r<length; r++) { while (s.count(hashes.at(r).second)) { s.erase(hashes.at(l).second); l++; } s.emplace(hashes.at(r).second); if (max_len<=s.size()) { max_len = s.size(); result = hashes.at(l).first; } } //////////////////// 出力 //////////////////// cout << result << endl; //////////////////// 終了 //////////////////// return 0; }