Submission #1492247


Source Code Expand

fn get_line() -> String {
    let mut s = String::new();
    std::io::stdin().read_line(&mut s).ok();
    s.trim().to_string()
}

fn reads<T>() -> Vec<T>
    where
        T: std::str::FromStr,
        <T as std::str::FromStr>::Err: std::fmt::Debug {
    get_line().split(' ').map(|x| x.parse().unwrap()).collect()
}

fn readln<T>() -> T
    where
        T: std::str::FromStr,
        <T as std::str::FromStr>::Err: std::fmt::Debug {
    get_line().parse().unwrap()
}

#[derive(Clone, Copy, Eq, PartialEq, Debug)]
enum E {
    Answer(u64),
    Less(u64),
}

use std::cmp;

fn main() {
    let n = readln();
    let xs = reads();
    let ys = reads();

    let mut zs = vec![E::Less(1000000000); n];

    let mut prev = 0;
    for (i, x) in xs.into_iter().enumerate() {
        if x > prev {
            prev = x;
            zs[i] = E::Answer(x);
        }
        else {
            zs[i] = E::Less(x);
        }
    }

    let mut prev = 0;
    let mut flag = true;
    for i in 0..n {
        let i = n - i - 1;
        let y = ys[i];

        if !flag {
            break;
        }

        if y > prev {
            prev = y;

            match zs[i] {
                E::Answer(n) if n == y => {},
                E::Less(n) if n >= y => {zs[i] = E::Answer(y);},
                _ => {flag = false;},
            }
        }
        else {
            match zs[i] {
                E::Answer(n) if y >= n => {},
                E::Less(n) => {zs[i] = E::Less(cmp::min(n, y));},
                _ =>  {flag = false;},
            }
        }
    }

    let mut res = 0;
    if flag {
        res = 1;
        for z in zs {
            if let E::Less(n) = z {
                res *= n;
                res %= 1000000007;
            }
        }
    }

    println!("{}", res);
}

Submission Info

Submission Time
Task C - Two Alpinists
User lodnix
Language Rust (1.15.1)
Score 400
Code Size 1872 Byte
Status AC
Exec Time 16 ms
Memory 11512 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 400 / 400
Status
AC × 4
AC × 21
Set Name Test Cases
Sample 0_000.txt, 0_001.txt, 0_002.txt, 0_003.txt
All 0_000.txt, 0_001.txt, 0_002.txt, 0_003.txt, 1_004.txt, 1_005.txt, 1_006.txt, 1_007.txt, 1_008.txt, 1_009.txt, 1_010.txt, 1_011.txt, 1_012.txt, 1_013.txt, 1_014.txt, 1_015.txt, 1_016.txt, 1_017.txt, 1_018.txt, 1_019.txt, 1_020.txt
Case Name Status Exec Time Memory
0_000.txt AC 2 ms 4352 KB
0_001.txt AC 2 ms 4352 KB
0_002.txt AC 2 ms 4352 KB
0_003.txt AC 2 ms 4352 KB
1_004.txt AC 2 ms 4352 KB
1_005.txt AC 2 ms 4352 KB
1_006.txt AC 2 ms 4352 KB
1_007.txt AC 2 ms 4352 KB
1_008.txt AC 16 ms 9972 KB
1_009.txt AC 13 ms 9744 KB
1_010.txt AC 13 ms 9832 KB
1_011.txt AC 15 ms 9464 KB
1_012.txt AC 14 ms 11512 KB
1_013.txt AC 14 ms 9780 KB
1_014.txt AC 14 ms 9908 KB
1_015.txt AC 15 ms 11512 KB
1_016.txt AC 14 ms 11512 KB
1_017.txt AC 13 ms 10612 KB
1_018.txt AC 13 ms 9464 KB
1_019.txt AC 12 ms 8444 KB
1_020.txt AC 10 ms 8444 KB