結果
| 問題 |
No.6 使いものにならないハッシュ
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2018-09-29 19:00:15 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 5 ms / 5,000 ms |
| コード長 | 1,556 bytes |
| コンパイル時間 | 960 ms |
| コンパイル使用メモリ | 103,232 KB |
| 最終ジャッジ日時 | 2025-01-06 14:12:19 |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 32 |
コンパイルメッセージ
main.cpp: In function ‘int main(int, char**)’:
main.cpp:44:25: warning: narrowing conversion of ‘(ps.std::vector<std::pair<int, int> >::size() - ((std::vector<std::pair<int, int> >::size_type)window_size))’ from ‘std::vector<std::pair<int, int> >::size_type’ {aka ‘long unsigned int’} to ‘int’ [-Wnarrowing]
44 | for(int i{ps.size() - window_size}; i < ps.size(); ++i) {
| ~~~~~~~~~~^~~~~~~~~~~~~
main.cpp:56:39: warning: narrowing conversion of ‘((ps.std::vector<std::pair<int, int> >::size() - ((std::vector<std::pair<int, int> >::size_type)window_size)) - 1)’ from ‘std::vector<std::pair<int, int> >::size_type’ {aka ‘long unsigned int’} to ‘int’ [-Wnarrowing]
56 | for(int i{ps.size() - window_size - 1}; i >= 0; --i) {
| ~~~~~~~~~~~~~~~~~~~~~~~~^~~
ソースコード
#include<iostream>
#include<vector>
#include<map>
#include<algorithm>
#include<cmath>
int hash(int n) {
if(n < 10) return n;
int h{};
while(n > 0) {
h += n % 10;
n /= 10;
}
return hash(h);
}
int main(int, char**) {
int k, n;
std::cin >> k >> n;
std::vector<bool> primes(n + 1, true);
primes[0] = primes[1] = false;
for(int i{2}; i < std::sqrt(n) + 1; ++i) {
if(!primes[i]) continue;
for(int j{i * 2}; j < n + 1; j += i) {
primes[j] = false;
}
}
std::vector<std::pair<int, int>> ps;
for(int i{}; i < n + 1; ++i) {
if(i >= k && primes[i]) ps.push_back(std::make_pair(i, hash(i)));
}
// for(auto e: ps) {
// std::cout << e.first << ',' << e.second << std::endl;
// }
// std::cout << ps.size() << std::endl;
int window_size = std::min(10, static_cast<int>(ps.size()));
while(window_size) {
std::vector<int> map(10);
for(int i{ps.size() - window_size}; i < ps.size(); ++i) {
++map[ps[i].second];
}
auto isOK = [](auto const& v) { return all_of(begin(v), end(v), [](int x) { return x < 2; }); };
if(isOK(map)) {
std::cout << ps[ps.size() - window_size].first << std::endl;
// std::cout << window_size << "here";
return 0;
}
for(int i{ps.size() - window_size - 1}; i >= 0; --i) {
--map[ps[i + window_size].second];
++map[ps[i].second];
if(isOK(map)) {
std::cout << ps[i].first << std::endl;
// std::cout << window_size;
return 0;
}
}
--window_size;
}
return 0;
}