結果
| 問題 |
No.6 使いものにならないハッシュ
|
| コンテスト | |
| ユーザー |
uafr_cs
|
| 提出日時 | 2015-06-09 03:39:44 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 205 ms / 5,000 ms |
| コード長 | 1,922 bytes |
| コンパイル時間 | 2,316 ms |
| コンパイル使用メモリ | 89,648 KB |
| 実行使用メモリ | 47,316 KB |
| 最終ジャッジ日時 | 2024-09-16 16:27:18 |
| 合計ジャッジ時間 | 8,678 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 32 |
ソースコード
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
public class Main {
public static final int hash(int n){
if(n < 10){
return n;
}else{
int ret = 0;
for(final char c : (n + "").toCharArray()){
ret += Character.getNumericValue(c);
}
return hash(ret);
}
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
final int K = sc.nextInt();
final int N = sc.nextInt();
boolean[] is_prime = new boolean[N + 1];
Arrays.fill(is_prime, true);
is_prime[0] = is_prime[1] = false;
LinkedList<Integer> primes = new LinkedList<Integer>();
for(int p = 2; p <= N; p++){
if(is_prime[p]){
if(p >= K){
primes.add(p);
}
for(int j = 2 * p; j <= N; j += p){
is_prime[j] = false;
}
}
}
boolean[] hash_use = new boolean[10];
LinkedList<Integer> hash_using = new LinkedList<Integer>();
LinkedList<Integer> prime_using = new LinkedList<Integer>();
int max_len = 1, min = Integer.MAX_VALUE;
for(final int prime : primes){
final int hash = hash(prime);
if(hash_use[hash]){
while(true){
final int removed_prime = prime_using.poll();
if(max_len <= hash_using.size()){
max_len = hash_using.size();
min = removed_prime;
}
final int removed_hash = hash_using.poll();
hash_use[removed_hash] = false;
if(removed_hash == hash){
break;
}
}
}
hash_using.add(hash);
prime_using.add(prime);
hash_use[hash] = true;
//System.out.println(hash + " : " + hash_using + "=" + prime_using + " " + prime + " " + min);
}
if(!hash_using.isEmpty() && max_len <= hash_using.size()){
max_len = hash_using.size();
min = prime_using.getFirst();
}
System.out.println(min);
}
}
uafr_cs