結果
問題 | No.12 限定された素数 |
ユーザー |
|
提出日時 | 2022-10-23 04:20:02 |
言語 | Java (openjdk 23) |
結果 |
AC
|
実行時間 | 1,575 ms / 5,000 ms |
コード長 | 6,066 bytes |
コンパイル時間 | 3,080 ms |
コンパイル使用メモリ | 92,184 KB |
実行使用メモリ | 77,008 KB |
最終ジャッジ日時 | 2024-07-02 01:07:27 |
合計ジャッジ時間 | 46,186 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 26 |
ソースコード
import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.lang.management.ManagementFactory;import java.util.Arrays;import java.util.LinkedHashSet;import java.util.Set;import java.util.function.IntFunction;class Main{boolean isDebug = ManagementFactory.getRuntimeMXBean().getInputArguments().toString().contains("-agentlib:jdwp");final MyReader in = new MyReader(System.in);final MyWriter out = new MyWriter(System.out);public static void main(final String[] args){ new Main().exe(); }private void exe(){input();preCalc();solve();out.flush();}int N = in.it();int[] A = in.it(N);private void input(){}private void preCalc(){}boolean[] allowed = new boolean[10];boolean[] used = new boolean[10];void solve(){for (var a:A)allowed[a] = true;int ans = -1;int last = 1;for (var p:primes(5000000))if (ng(p)) {if (clear())ans = Math.max(ans,p -1 -last);if (ans == 0)System.out.println();last = p +1;used = new boolean[10];} elseupdUsed(p);if (clear())ans = Math.max(ans,5000000 -last);out.println(ans);}private boolean clear(){for (int i = 0;i < 10;i++)if (allowed[i] && !used[i])return false;return true;}private void updUsed(int p){while (0 < p) {used[p %10] = true;p /= 10;}}private boolean ng(int p){while (0 < p) {if (!allowed[p %10])return true;p /= 10;}return false;}Set<Integer> primes(final int bound){Set<Integer> ret = new LinkedHashSet<>();for (int i = 2;i <= bound;i++) {boolean flg = true;for (final int p:ret)if (i %p == 0) {flg = false;break;} else if (i < p *p)break;if (flg)ret.add(i);}return ret;}/* 定数 */// final static int mod = (int) 1e9 +7;final static int mod = 998244353;final static String yes = "Yes";final static String no = "No";/* 入力 */static class MyReader{byte[] buf = new byte[1 <<16];int head = 0;int tail = 0;InputStream in;public MyReader(final InputStream in){ this.in = in; }byte read(){if (head == tail) {try {tail = in.read(buf);} catch (IOException e) {e.printStackTrace();}head = 0;}return buf[head++];}boolean isPrintable(final byte c){ return 32 < c && c < 127; }boolean isNum(final byte c){ return 47 < c && c < 58; }byte nextPrintable(){byte ret = read();return isPrintable(ret) ? ret : nextPrintable();}int it(){ return (int) lg(); }int[] it(final int N){int[] a = new int[N];Arrays.setAll(a,i -> it());return a;}int[][] it(final int H,final int W){ return arr(new int[H][],i -> it(W)); }int idx(){ return it() -1; }int[] idx(final int N){int[] a = new int[N];Arrays.setAll(a,i -> idx());return a;}int[][] idx(final int H,final int W){ return arr(new int[H][],i -> idx(W)); }long lg(){byte i = nextPrintable();boolean negative = i == 45;long n = negative ? 0 : i -'0';while (isPrintable(i = read()))n = 10 *n +i -'0';return negative ? -n : n;}long[] lg(final int N){long[] a = new long[N];Arrays.setAll(a,i -> lg());return a;}long[][] lg(final int H,final int W){ return arr(new long[H][],i -> lg(W)); }char[] ch(){ return str().toCharArray(); }char[][] ch(final int H){ return arr(new char[H][],i -> ch()); }String line(){StringBuilder sb = new StringBuilder();byte c;while (isPrintable(c = read()) || c == ' ')sb.append((char) c);return sb.toString();}String str(){StringBuilder sb = new StringBuilder();sb.append((char) nextPrintable());byte c;while (isPrintable(c = read()))sb.append((char) c);return sb.toString();}String[] str(final int N){ return arr(new String[N],i -> str()); }<T> T[] arr(final T[] arr,final IntFunction<T> f){Arrays.setAll(arr,f);return arr;}}/* 出力 */static class MyWriter{OutputStream out;byte[] buf = new byte[1 <<16];byte[] ibuf = new byte[20];int tail = 0;public MyWriter(final OutputStream out){ this.out = out; }void flush(){try {out.write(buf,0,tail);tail = 0;} catch (IOException e) {e.printStackTrace();}}void sp(){ write((byte) ' '); }void ln(){ write((byte) '\n'); }void write(final byte b){buf[tail++] = b;if (tail == buf.length)flush();}void write(final byte[] b,final int off,final int len){for (int i = off;i < off +len;i++)write(b[i]);}void write(long n){if (n < 0) {n = -n;write((byte) '-');}int i = ibuf.length;do {ibuf[--i] = (byte) (n %10 +'0');n /= 10;} while (n > 0);write(ibuf,i,ibuf.length -i);}void println(final boolean b){ println(b ? yes : no); }void println(final long n){write(n);ln();}public void println(final double d){ println(String.valueOf(d)); }void println(final String s){for (byte b:s.getBytes())write(b);ln();}public void println(final char[] s){for (char b:s)write((byte) b);ln();}void println(final int[] a){for (int i = 0;i < a.length;i++) {if (0 < i)sp();write(a[i]);}ln();}void println(final long[] a){for (int i = 0;i < a.length;i++) {if (0 < i)sp();write(a[i]);}ln();}}}