Submission #1305480


Source Code Expand

use std::fmt::Debug;
use std::io;
use std::io::{Read, Stdin};
use std::str;
use std::str::FromStr;
use std::usize;
use std::cmp;
use std::collections::vec_deque::VecDeque;
use std::i64::MAX;

fn main() {
    let mut sc = Scanner::new();
    let n = sc.parse::<usize>();
    let l = sc.parse::<i64>();
    let t = sc.parse::<i64>();

    let mut x: Vec<i64> = vec![0; n];
    let mut w: Vec<usize> = vec![0; n];

    for i in 0..n {
        x[i] = sc.parse::<i64>();
        w[i] = sc.parse::<usize>();
    }

    let cross_count = (0..n)
        .map(|i| {
            let w0 = w[0];
            let wi = w[i];
            if w0 == wi {
                return 0;
            }

            let interval;
            if w0 == 1 {
                interval = x[i] - x[0];
            } else {
                interval = x[0] + l - x[i];
            }

            if interval > t * 2 {
                return 0;
            }

            let time = t * 2 - interval;
            let count;
            if time % l == 0 && w[0] == 1 {
                count = time / l;
            } else {
                count = time / l + 1;
            }
            return count;
        })
        .collect::<Vec<i64>>();

    let count_sum: i64 = cross_count.iter().sum::<i64>() % (n as i64);
    let position;
    let num;
    if w[0] == 1 {
        position = (x[0] + t) % l;
        num = count_sum;

    } else {
        position = (x[0] - (t % l) + l) % l;
        num = (n as i64) - count_sum;
    }

    let mut positions: Vec<i64> = Vec::new();
    for i in 0..n {
        let p;
        if w[i] == 1 {
            p = (x[i] + t) % l;
        } else {
            p = (x[i] - (t % l) + l) % l;
        }
        positions.push(p);
    }

    positions.sort();

    let mut a = 0;
    for i in 0..n {
        if positions[i] == position {
            a = i;
            break;
        }
    }

    let mut ans: Vec<i64> = vec![0;n];
    for i in 0..n {
        let idx = (i + num as usize) % n;
        let p = (a + i as usize) % n;
        ans[idx] = positions[p];
    }

    for a in &ans {
        println!("{}", a);
    }

}

struct Scanner {
    stdin: Stdin,
    buf: Vec<u8>,
}

impl Scanner {
    fn new() -> Scanner {
        Scanner {
            stdin: io::stdin(),
            buf: Vec::with_capacity(256),
        }
    }

    fn parse<T: FromStr>(&mut self) -> T
        where <T as FromStr>::Err: Debug
    {
        self.buf.clear();
        let mut it = self.stdin.lock().bytes();
        let mut c = it.next().unwrap().unwrap();
        while c == ' ' as u8 || c == '\n' as u8 {
            c = it.next().unwrap().unwrap();
        }
        while !(c == ' ' as u8 || c == '\n' as u8) {
            self.buf.push(c);
            c = it.next().unwrap().unwrap();
        }
        str::from_utf8(&self.buf).unwrap().parse::<T>().unwrap()
    }
}

Submission Info

Submission Time
Task C - Ants on a Circle
User kenkoooo
Language Rust (1.15.1)
Score 700
Code Size 2984 Byte
Status AC
Exec Time 223 ms
Memory 11388 KB

Compile Error

warning: unused import: `std::cmp`, #[warn(unused_imports)] on by default
 --> ./Main.rs:7:5
  |
7 | use std::cmp;
  |     ^^^^^^^^

warning: unused import: `std::collections::vec_deque::VecDeque`, #[warn(unused_imports)] on by default
 --> ./Main.rs:8:5
  |
8 | use std::collections::vec_deque::VecDeque;
  |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

warning: unused import: `std::i64::MAX`, #[warn(unused_imports)] on by default
 --> ./Main.rs:9:5
  |
9 | use std::i64::MAX;
  |     ^^^^^^^^^^^^^

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 700 / 700
Status
AC × 2
AC × 20
Set Name Test Cases
Sample sample_01.txt, sample_02.txt
All sample_01.txt, sample_02.txt, sample_01.txt, sample_02.txt, subtask_1_01.txt, subtask_1_02.txt, subtask_1_03.txt, subtask_1_04.txt, subtask_1_05.txt, subtask_1_06.txt, subtask_1_07.txt, subtask_1_08.txt, subtask_1_09.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_12.txt, subtask_1_13.txt, subtask_1_14.txt, subtask_1_15.txt, subtask_1_16.txt
Case Name Status Exec Time Memory
sample_01.txt AC 2 ms 4352 KB
sample_02.txt AC 2 ms 4352 KB
subtask_1_01.txt AC 131 ms 6908 KB
subtask_1_02.txt AC 107 ms 6780 KB
subtask_1_03.txt AC 223 ms 11388 KB
subtask_1_04.txt AC 216 ms 11388 KB
subtask_1_05.txt AC 34 ms 4352 KB
subtask_1_06.txt AC 50 ms 4476 KB
subtask_1_07.txt AC 203 ms 11004 KB
subtask_1_08.txt AC 209 ms 11132 KB
subtask_1_09.txt AC 131 ms 6780 KB
subtask_1_10.txt AC 117 ms 6652 KB
subtask_1_11.txt AC 29 ms 4476 KB
subtask_1_12.txt AC 194 ms 9212 KB
subtask_1_13.txt AC 140 ms 7036 KB
subtask_1_14.txt AC 125 ms 6908 KB
subtask_1_15.txt AC 2 ms 4352 KB
subtask_1_16.txt AC 2 ms 4352 KB