use std::io::*; use std::str::FromStr; #[allow(dead_code)] fn get_line() -> String { let stdin = stdin(); let mut line = String::new(); stdin.lock().read_line(&mut line).expect("io error."); line.trim().to_string() } #[allow(dead_code)] fn cast(s: &str) -> T { s.parse().ok().expect("parse error.") } #[allow(dead_code)] fn get_vec() -> Vec { (&get_line()).split(' ').map(cast::).collect() } /* ---------- ここまでテンプレ ---------- */ fn main() { let v: Vec = get_vec(); let mut ok: i64 = 0; let mut ng: i64 = 10_000_001; while ng - ok > 1 { let mid = (ok + ng) / 2; let mut dif: i64 = 0; for i in 0..3 { if v[i] < mid { dif += v[i] - mid; } else { dif += (v[i] - mid) / 2; } } // println!("{} -> {}", mid, dif); if dif >= 0 { ok = mid; } else { ng = mid; } } println!("{}", ok); }