結果
問題 | No.871 かえるのうた |
ユーザー |
![]() |
提出日時 | 2019-09-14 03:38:23 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 115 ms / 2,000 ms |
コード長 | 927 bytes |
コンパイル時間 | 426 ms |
コンパイル使用メモリ | 62,700 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-11-30 10:56:29 |
合計ジャッジ時間 | 3,129 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 49 |
ソースコード
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int n, k; cin >> n >> k; vector<long long> x(n), a(n); for (int i = 0; i < n; ++i) { cin >> x[i]; } for (int i = 0; i < n; ++i) { cin >> a[i]; } long long frontX = x[k - 1] - a[k - 1]; long long backX = x[k - 1] + a[k - 1]; int frontIndex = k - 1 - 1; int backIndex = k - 1 + 1; for (;;) { bool newlySung = false; if (frontIndex >= 0 && frontX <= x[frontIndex]) { frontX = min(frontX, x[frontIndex] - a[frontIndex]); backX = max(backX, x[frontIndex] + a[frontIndex]); --frontIndex; newlySung = true; } if (backIndex < n && x[backIndex] <= backX) { backX = max(backX, x[backIndex] + a[backIndex]); frontX = min(frontX, x[backIndex] - a[backIndex]); ++backIndex; newlySung = true; } if (!newlySung) { break; } } cout << (backIndex - frontIndex - 2 + 1) << endl; return 0; }