結果

問題 No.12 限定された素数
ユーザー こるこる
提出日時 2017-01-07 13:50:00
言語 Java21
(openjdk 21)
結果
AC  
実行時間 879 ms / 5,000 ms
コード長 2,462 bytes
コンパイル時間 2,011 ms
コンパイル使用メモリ 78,500 KB
実行使用メモリ 77,856 KB
最終ジャッジ日時 2024-05-03 09:56:43
合計ジャッジ時間 12,775 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 230 ms
73,492 KB
testcase_01 AC 326 ms
76,136 KB
testcase_02 AC 230 ms
73,324 KB
testcase_03 AC 244 ms
74,132 KB
testcase_04 AC 239 ms
73,324 KB
testcase_05 AC 422 ms
77,060 KB
testcase_06 AC 458 ms
76,168 KB
testcase_07 AC 655 ms
77,808 KB
testcase_08 AC 303 ms
76,232 KB
testcase_09 AC 276 ms
75,160 KB
testcase_10 AC 414 ms
76,596 KB
testcase_11 AC 811 ms
76,420 KB
testcase_12 AC 690 ms
77,600 KB
testcase_13 AC 456 ms
77,680 KB
testcase_14 AC 318 ms
76,220 KB
testcase_15 AC 463 ms
77,768 KB
testcase_16 AC 879 ms
77,660 KB
testcase_17 AC 201 ms
71,004 KB
testcase_18 AC 228 ms
73,388 KB
testcase_19 AC 243 ms
73,312 KB
testcase_20 AC 267 ms
73,008 KB
testcase_21 AC 288 ms
75,196 KB
testcase_22 AC 236 ms
73,376 KB
testcase_23 AC 225 ms
73,332 KB
testcase_24 AC 232 ms
73,360 KB
testcase_25 AC 417 ms
77,856 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

import java.io.*;
import java.util.*;
public class Main {
    
    static char[] a;
    
    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        int n=Integer.parseInt(br.readLine());
        StringTokenizer st=new StringTokenizer(br.readLine());
        a=new char[n];
        for(int i=0;i<n;i++){
            a[i]=st.nextToken().charAt(0);
        }
        
        
        int maxi=5000000;
        boolean[] e=new boolean[maxi+1];
        Arrays.fill(e,true);
        e[0]=e[1]=false;
        int i=2;
        while(i*i<=maxi){
            int j=i+i;
            while(j<=maxi){
                e[j]=false;
                j+=i;
            }i++;
            while(!e[i]){ i++; }
        }List<Integer> list=new ArrayList<>();
        for(i=0;i<maxi+1;i++){
            if(e[i]){ list.add(i); }
        }
        
        
        int sum_max=0;
        boolean end_flag=false;
        int l=0;
        int[] end_list=new int[n];
        Arrays.fill(end_list, 0);
        for(int r=0;r<list.size();r++){
            if(check(list.get(r))){
                if(sum(end_list)!=n){
                    for(int j=0;j<a.length;j++){
                        for(int k=0;k<String.valueOf(list.get(r)).length();k++){
                            if(a[j]==String.valueOf(list.get(r)).charAt(k)) end_list[j]=1;
                        }
                    }
                }if(sum(end_list)==n){
                    end_flag=true;
                    int r_index=(r==list.size()-1) ? maxi:list.get(r+1)-1;
                    int l_index=(l==0) ? 1:list.get(l-1)+1;
                    //System.out.println(r_index+" "+l_index);
                    sum_max=Math.max(sum_max,(r_index-l_index));
                }
            }else{
                Arrays.fill(end_list, 0);
                l=r+1;
            }
        }
        System.out.println((end_flag) ? sum_max:-1);
    }
    
    static boolean check(int num){
        String str=String.valueOf(num);
        int count=0;
        for(int i=0;i<str.length();i++){
            for(int j=0;j<a.length;j++){
                if(a[j]==str.charAt(i)){ count++; break; }
            }
        }
        //if(count==str.length()) System.out.println(num);
        return count==str.length();
    }
    
    static int sum(int[] array){
        int sum=0;
        for(int n:array) sum+=n;
        return sum;
    }
    
}
0