結果
問題 | No.413 +5,000,000pts |
ユーザー | yuppe19 😺 |
提出日時 | 2016-06-07 17:04:16 |
言語 | Java21 (openjdk 21) |
結果 |
AC
|
実行時間 | 181 ms / 5,000 ms |
コード長 | 1,125 bytes |
コンパイル時間 | 4,985 ms |
コンパイル使用メモリ | 76,840 KB |
実行使用メモリ | 44,576 KB |
最終ジャッジ日時 | 2024-04-20 07:23:33 |
合計ジャッジ時間 | 3,659 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ソースコード
import java.io.*; import java.util.*; import static java.lang.Math.*; public class Chinamini2 { private long calc(long d) { return (long)( (-1 + sqrt(1 + 4*d)) / 2.d ); } // 与えられた d に対して、t が適切な値かどうかを返す boolean isCorrect(long t, long d) { return t*t + t <= d && d < (t+1)*(t+1) + (t+1); } private void solve() { long MAX_VALUE = (long)pow(10, 18); int N = 100_000; PrintWriter out = new PrintWriter(System.out); // 高速出力 for(long k=(long)sqrt(MAX_VALUE), cnt=0; cnt<N; --k) { long val = k*k + k; for(long delta=1; cnt<N; ++delta) { // 引く微小値 long d = val - delta; if(!(1 <= d && d <= MAX_VALUE)) { break; } if(!isCorrect(calc(d), d)) { // チャレンジできる(=関数が偽を返す)ならそれを出力する out.println(d); ++cnt; } else { // 引きすぎると誤差が出なくなるので、次の k に移る break; } } } out.flush(); } public static void main(String[] args) { new Chinamini2().solve(); } }