QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#697792#3274. 随机游走robinyqcCompile Error//C++201.8kb2024-11-01 15:47:342024-11-01 15:47:34

Judging History

This is the latest submission verdict.

  • [2024-11-01 15:47:34]
  • Judged
  • [2024-11-01 15:47:34]
  • Submitted

answer

struct NumbReader
{
    buffer: Vec<String>,
    ptr: usize
}

impl NumbReader
{
    fn new<R: std::io::Read>(inner: &mut R) -> NumbReader
    {
        let mut buf = String::new();
        inner.read_to_string(&mut buf).unwrap();
        NumbReader { buffer: buf.trim().
            split_whitespace().map(str::to_string).collect() , ptr: 0} 
    }

    fn next<T: std::str::FromStr>(self: &mut Self) 
        -> Result<T, <T as std::str::FromStr>::Err>
    {
        let result = self.buffer[self.ptr].as_str().parse::<T>()?;
        self.ptr += 1;
        Ok(result)
    }
}

fn qpow(mut x: u64, mut y: u64, p: u64) -> u64
{
    let mut res = 1u64;
    while y > 0 {
        if y & 1 == 1 {
            res = res * x % p;
        }
        x = x * x % p;
        y >>= 1;
    }
    return res;
}

fn solve(n: u64, m: u64, p: u64)
{
    if n == 1 {
        println!("0");
        return ;
    }
    if m < n - 1 {
        println!("{}", ((n - m + 1) * qpow(2, m, p) + p - 2) % p);
    }
    else {
        let diff = |x, y| if x < y { x + p - y } else { x - y };
        let a1 = (m + 2 - n) / (n - 1);
        let m1 = m - a1 - (n - 2) * (a1 + 1);
        let p1 = qpow(a1 + 3, m1, p);
        let mut res = 
            diff((a1 + 3) * p1 % p, (a1 + 3) % p) * qpow(a1 + 2, p - 2, p) % p;
        let p2 = qpow(a1 + 2, n - m1 - 2, p);
        res = (res + p1 * (diff(p2 * (a1 + 2) % p, (a1 + 2) % p) % p
            * qpow(a1 + 1, p - 2, p) % p)) % p;
        res = (res + p1 * p2 % p * (a1 + 1)) % p;
        println!("{}", res);
    }
}

fn main() 
{
    let mut rd = NumbReader::new(&mut std::io::BufReader::new(std::io::stdin()));
    let t = rd.next::<u32>().unwrap();
    for _ in 0..t {
        let n: u64 = rd.next().unwrap();
        let m: u64 = rd.next().unwrap();
        let p: u64 = rd.next().unwrap();
        solve(n, m, p);
    }
}

Details

answer.code:67:14: error: too many decimal points in number
   67 |     for _ in 0..t {
      |              ^~~~
answer.code:3:5: error: ‘buffer’ does not name a type
    3 |     buffer: Vec<String>,
      |     ^~~~~~
answer.code:7:6: error: expected initializer before ‘NumbReader’
    7 | impl NumbReader
      |      ^~~~~~~~~~
answer.code:26:1: error: ‘fn’ does not name a type
   26 | fn qpow(mut x: u64, mut y: u64, p: u64) -> u64
      | ^~
answer.code:39:1: error: ‘fn’ does not name a type
   39 | fn solve(n: u64, m: u64, p: u64)
      | ^~
answer.code:63:1: error: ‘fn’ does not name a type
   63 | fn main()
      | ^~