結果
問題 | No.76 回数の期待値で練習 |
ユーザー | 37zigen |
提出日時 | 2020-03-27 02:45:58 |
言語 | Java21 (openjdk 21) |
結果 |
AC
|
実行時間 | 1,025 ms / 5,000 ms |
コード長 | 3,290 bytes |
コンパイル時間 | 2,167 ms |
コンパイル使用メモリ | 78,692 KB |
実行使用メモリ | 63,800 KB |
最終ジャッジ日時 | 2024-06-10 15:52:22 |
合計ジャッジ時間 | 3,681 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 112 ms
52,824 KB |
testcase_01 | AC | 1,025 ms
63,800 KB |
ソースコード
import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.math.BigInteger; import java.util.Arrays; import java.util.NoSuchElementException; import java.util.Scanner; public class Main { public static void main(String[] args) throws FileNotFoundException { long t = System.currentTimeMillis(); new Main().run(); System.err.println(System.currentTimeMillis() - t); } void run() { Scanner sc = new Scanner(System.in); double[] p=new double[7]; { double[] E=new double[] { 1.0000000000000000, 1.0833333333333333, 1.2569444444444444, 1.5353009259259260, 1.6915991512345676, 2.0513639724794235, 5.7894594000345325, 13.789629635263326, 27.122962962962941, 267.12296296296188 }; for(int i=0;i<6;++i) { double tmp=E[i]-1; for(int j=1;j<=6;++j) { if(i>=j)tmp-=E[i-j]*p[j]; } p[i]=tmp; } p[6]=1; for(int i=1;i<=5;++i)p[6]-=p[i]; } int T=sc.nextInt(); while(T-->0) { long K=sc.nextLong(); double[] E=new double[(int)K+1]; for(int k=(int)K-1;k>=0;--k) { E[k]=1; for(int i=1;i<=6;++i) { E[k]+=(k+i>=K?0:E[k+i])*p[i]; } } System.out.println(E[0]); } } static void tr(Object... objects) { System.out.println(Arrays.deepToString(objects)); } } class FastScanner { private final InputStream in = System.in; private final byte[] buffer = new byte[1024]; private int ptr = 0; private int buflen = 0; private boolean hasNextByte() { if (ptr < buflen) { return true; }else{ ptr = 0; try { buflen = in.read(buffer); } catch (IOException e) { e.printStackTrace(); } if (buflen <= 0) { return false; } } return true; } private int readByte() { if (hasNextByte()) return buffer[ptr++]; else return -1;} private static boolean isPrintableChar(int c) { return 33 <= c && c <= 126;} private void skipUnprintable() { while(hasNextByte() && !isPrintableChar(buffer[ptr])) ptr++;} public boolean hasNext() { skipUnprintable(); return hasNextByte();} public String next() { if (!hasNext()) throw new NoSuchElementException(); StringBuilder sb = new StringBuilder(); int b = readByte(); while(isPrintableChar(b)) { sb.appendCodePoint(b); b = readByte(); } return sb.toString(); } public long nextLong() { if (!hasNext()) throw new NoSuchElementException(); long n = 0; boolean minus = false; int b = readByte(); if (b == '-') { minus = true; b = readByte(); } if (b < '0' || '9' < b) { throw new NumberFormatException(); } while(true){ if ('0' <= b && b <= '9') { n *= 10; n += b - '0'; }else if(b == -1 || !isPrintableChar(b)){ return minus ? -n : n; }else{ throw new NumberFormatException(); } b = readByte(); } } public int nextInt() { return (int)nextLong(); } }