結果
| 問題 |
No.413 +5,000,000pts
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2016-06-07 17:03:46 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 574 ms / 5,000 ms |
| コード長 | 1,028 bytes |
| コンパイル時間 | 3,613 ms |
| コンパイル使用メモリ | 74,116 KB |
| 実行使用メモリ | 52,028 KB |
| 最終ジャッジ日時 | 2024-10-12 02:29:17 |
| 合計ジャッジ時間 | 4,851 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 1 |
ソースコード
import java.util.*;
import static java.lang.Math.*;
public class Chinamini {
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;
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)) { // チャレンジできる(=関数が偽を返す)ならそれを出力する
System.out.println(d);
++cnt;
} else { // 引きすぎると誤差が出なくなるので、次の k に移る
break;
}
}
}
}
public static void main(String[] args) {
new Chinamini().solve();
}
}