結果
問題 | No.871 かえるのうた |
ユーザー |
![]() |
提出日時 | 2019-09-08 00:39:14 |
言語 | Rust (1.83.0 + proconio) |
結果 |
AC
|
実行時間 | 24 ms / 2,000 ms |
コード長 | 1,150 bytes |
コンパイル時間 | 12,956 ms |
コンパイル使用メモリ | 384,664 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-11-30 10:56:14 |
合計ジャッジ時間 | 14,567 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 49 |
ソースコード
use std::vec::Vec; use std::cmp::min; use std::cmp::max; fn read<T: std::str::FromStr>() -> T { let mut s = String::new(); std::io::stdin().read_line(&mut s).ok(); s.trim().parse().ok().unwrap() } fn read_vec<T: std::str::FromStr>() -> Vec<T> { read::<String>().split_whitespace().map(|e| e.parse().ok().unwrap()).collect() } fn main() { let (n, k) = { let v: Vec<usize> = read_vec(); (v[0], v[1] - 1) }; let x: Vec<i64> = read_vec(); let a: Vec<i64> = read_vec(); let mut l = k; let mut r = k; let mut left = x[k] - a[k]; let mut right = x[k] + a[k]; let mut update = true; while update { update = false; // 左側のアップデート while l > 0 && left <= x[l-1] { update = true; left = min(x[l-1] - a[l-1], left); right = max(x[l-1] + a[l-1], right); l -= 1; //println!("{}", l); } while r + 1 < n && right >= x[r+1] { update = true; left = min(x[r+1] - a[r+1], left); right = max(x[r+1] + a[r+1], right); r += 1; //println!("{}", r); } //println!("l = {}, r = {}", l, r); } println!("{}", r - l +1); }