結果
問題 | No.413 +5,000,000pts |
ユーザー | yuppe19 😺 |
提出日時 | 2016-06-07 17:04:16 |
言語 | Java21 (openjdk 21) |
結果 |
AC
|
実行時間 | 210 ms / 5,000 ms |
コード長 | 1,125 bytes |
コンパイル時間 | 3,395 ms |
コンパイル使用メモリ | 76,492 KB |
実行使用メモリ | 44,560 KB |
最終ジャッジ日時 | 2024-10-12 02:29:21 |
合計ジャッジ時間 | 4,075 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ソースコード
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(); } }