結果
| 問題 | No.6 使いものにならないハッシュ | 
| コンテスト | |
| ユーザー |  ei1333333 | 
| 提出日時 | 2016-09-02 00:15:51 | 
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 4 ms / 5,000 ms | 
| コード長 | 1,006 bytes | 
| コンパイル時間 | 1,235 ms | 
| コンパイル使用メモリ | 164,028 KB | 
| 実行使用メモリ | 5,376 KB | 
| 最終ジャッジ日時 | 2024-09-16 16:36:06 | 
| 合計ジャッジ時間 | 2,176 ms | 
| ジャッジサーバーID (参考情報) | judge4 / judge5 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 32 | 
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:50:26: warning: use of an operand of type ‘bool’ in ‘operator++’ is deprecated [-Wdeprecated]
   50 |       val[f(primes[tail])]++;
      |       ~~~~~~~~~~~~~~~~~~~^
            
            ソースコード
#include <bits/stdc++.h>
using namespace std;
const int SZ = 200000;
int dp[200001];
int g(int v)
{
  if(v < 10) return (v);
  return (g(v / 10) + v % 10);
}
int f(int v)
{
  if(~dp[v]) {
    return (dp[v]);
  } else if(v >= 10) {
    return (dp[v] = f(g(v)));
  } else {
    return (dp[v] = v);
  }
}
int main()
{
  bool prime[SZ + 1] = {};
  prime[1] = true;
  for(int i = 2; i * i <= SZ; ++i) {
    if(!prime[i]) {
      for(int j = i + i; j <= SZ; j += i) prime[j] = true;
    }
  }
  memset(dp, -1, sizeof(dp));
  int K, N;
  cin >> K;
  cin >> N;
  vector< int > primes;
  for(int i = K; i <= N; i++) {
    if(!prime[i]) primes.push_back(i);
  }
  int tail = 0, ret = 0, p = 0;
  bool val[10] = {};
  for(int i = 0; i < primes.size(); ++i) {
    while(tail < primes.size() && !val[f(primes[tail])]) {
      val[f(primes[tail])]++;
      ++tail;
    }
    if(ret <= tail - i) {
      p = primes[i];
    }
    ret = max(ret, tail - i);
    val[f(primes[i])] = false;
  }
  cout << p << endl;
}
            
            
            
        