2 minute read


sport

codeforces 730 div 2 리뷰 (나머지 문제) - 2

해설보고 구현하니 바로 됨. 원리는 간단한 아이디어였다..

rust solution

원래 답이 x일 때, x^0^(0^1)^(1^2)…((x-1)^x) 이런 식으로 계산시키면 답을 맞추게 된다. https://codeforces.com/contest/1543/status

rust라서 cpp과 속도가 비슷할 줄 알았는데, cpp은 1초대인 반면 실행 시간이 3초대로 나와서 뭔가 아쉽다. 많이 느린 부분이 있나? 주워온 unsafe scanner를 사용해도 마찬가지였다.

...
fn from_base_vector(vector: &Vec<i32>, base: i32) -> i32 {
    let mut result = 0;
    
    for (i, item) in vector.iter().enumerate() {
        result = result + item * base.pow(i as u32);
    }

    result
}

fn to_base_vector(original: i32, base:i32) -> Vec<i32> {
    let mut vec = vec![];
    let mut ori = original;
    if ori == 0 {
        vec.push(0);
        return vec;
    }

    while ori > 0 {
        vec.push(ori % base);
        ori = ori / base;
    }
    
    return vec;
}

enum VectorOp {
    Add,
    Sub
}

fn vector_op(op: VectorOp, a: Vec<i32>, b: Vec<i32>, modv: i32) -> Vec<i32> {
    match op {
        VectorOp::Add => {
            return vector_xor(&a, &b, modv);
        },
        VectorOp::Sub => {
            return vector_sub_xor(&a, &b, modv);
        }
    }
}

fn vector_xor(a: &Vec<i32>, b: &Vec<i32>, modv: i32) -> Vec<i32> {
    let mut result = vec![];
    let alen = a.len();
    let blen = b.len();
    let len = std::cmp::max(alen, blen);
    
    for i in 0..len {
        let aval = if i < alen { a[i] } else { 0 };
        let bval = if i < blen { b[i] } else { 0 };
        result.push((aval + bval) % modv);
    }

    result
}

fn vector_sub_xor(a: &Vec<i32>, b: &Vec<i32>, modv: i32) -> Vec<i32> {
    let mut result = vec![];
    let alen = a.len();
    let blen = b.len();
    let len = std::cmp::max(alen, blen);
    
    for i in 0..len {
        let aval = if i < alen { a[i] } else { 0 };
        let bval = if i < blen { b[i] } else { 0 };
        // dbg2!(aval, bval, modv);
        result.push((aval - bval + modv) % modv);
    }

    result
}

fn solve<R: io::BufRead, W: io::Write>(scan: &mut UnsafeScanner<R>, out: &mut W) {
    let cases = ri32(scan);

    let mut vects = vec![vec![0];200005];
    
    for _case in 0..cases {
        let (n,k) = (rusize(scan), ri32(scan));
        let modv = k;
        let mut query = to_base_vector(0, modv);

        // let mut vects = vec![];
        for i in 0..n+2 {
            vects[i] = to_base_vector(i as i32, modv);
        }

        for i in 0..n {
            writeln!(out, "{}", from_base_vector(&query, modv));
            out.flush();
            if ri32(scan) == 1 { 
                break; 
            }

            // let im1 = to_base_vector(i-1, modv);
            // let im2 = to_base_vector(i-2, modv);
            let im1 = &vects[i+1];
            let im2 = &vects[i];
            
            query = if i % 2 == 0 {
                vector_sub_xor(&im2, &im1, modv)
            } else {
                vector_sub_xor(&im1, &im2, modv)
            };
        }
    }
}
...

jetson nano 셋업

내부에서는 연결이 되는데 왜 외부에서는 안되나 씨름했는데, 외부 포워딩이 안되있었다. 외부 주소로도 내부 관리페이지로 바로 접속되다보니 까먹었다.

팬 설치했는데, Pwm target은 직접 줘야 하는 상태이다. 온도 기반 스크립트 적용할 예정.

몰랐는데 젯슨나노는 와이파이 모듈이 내장되어있지 않아서 랜선으로 연결해주어야 했다.


Comments