1 minute read


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