log 2021-07-25
project
기본 배포 셋업
grpc 예제를 실서버에 배포하는 기본 도커파일작성
그런데, 벌써 애매하다. 도커로 실행하려 했는데, 서버와 클라이언트가 호스트 포트를 같이 사용할 수 없다.
- 러스트를 도커 빌드할때 캐싱하는 적절한 방법 적용하기
sport
cf p1272a - three friends
세 개의 수를 1씩 움직이거나 움직이지 않도록 해서 최소 각 차이 구하기
평균 구해서 0.5차이 이상이면 움직이게 했는데, 평균 구할때 i32로 구해서 오버플로로 1미스.
rust solution
fn get_closer(ori: f64, target: f64) -> f64 {
// if |target - ori| <= 0.5, don't move
if (target - ori).abs() <= 0.5f64 {
return ori;
}
// otherwise, move closer by one unit
let plus_ori = ori + 1.0f64;
let sub_ori = ori - 1.0f64;
// return which of the two is closer to target
if (target - plus_ori).abs() < (target - sub_ori).abs() {
return plus_ori;
} else {
return sub_ori;
}
}
fn solve<R: io::BufRead, W: io::Write>(scan: &mut UnsafeScanner<R>, out: &mut W) {
let cases = ri32(scan);
for i in 0..cases {
let (a,b,c) = (ri64(scan), ri64(scan), ri64(scan));
// get avg of a,b,c
let avg = (a+b+c) as f64 / 3.0;
let na = get_closer(a as f64, avg) as i64;
let nb = get_closer(b as f64, avg) as i64;
let nc = get_closer(c as f64, avg) as i64;
// get |na-nb|+|nb-nc|+|nc-na|
let diff = (na-nb).abs() + (nb-nc).abs() + (nc-na).abs();
// print
writeln!(out, "{}", diff);
}
}
Comments