結果
問題 | No.2142 Segment Zero |
ユーザー |
![]() |
提出日時 | 2022-12-02 21:46:47 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 4 ms / 2,000 ms |
コード長 | 668 bytes |
コンパイル時間 | 470 ms |
コンパイル使用メモリ | 63,744 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-11-17 04:04:50 |
合計ジャッジ時間 | 1,683 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 35 |
ソースコード
//1 + ... + n >= Kなる最小のnに着目すると、2回で必ず達成可能と分かり、1回でできるかの判定問題と分かる。 //和が(1+...+N)-Kになる区間を探せばよく、これは二分探索でも尺取りでもいい。 #include <iostream> #define int long long using namespace std; int N, K; signed main() { int i, j; cin >> N >> K; int s = 0, aim = N * (N + 1) / 2 - K; j = 1; for (i = 1; i <= N; i++) { for (; j <= N; j++) { if (s >= aim) break; s += j; } if (s == aim) { //cout << i << ", " << j << ", s = " << s << endl; cout << 1 << endl; return 0; } s -= i; } cout << 2 << endl; return 0; }