結果

問題 No.8119 間に合いませんでした><;
ユーザー 獅子座じゃない人
提出日時 2025-02-05 21:37:29
言語 Rust
(1.83.0 + proconio)
結果
TLE  
実行時間 -
コード長 1,838 bytes
コンパイル時間 19,033 ms
コンパイル使用メモリ 376,140 KB
実行使用メモリ 10,496 KB
最終ジャッジ日時 2025-02-05 21:39:00
合計ジャッジ時間 27,339 ms
ジャッジサーバーID
(参考情報)
judge2 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 23 TLE * 6
権限があれば一括ダウンロードができます

ソースコード

diff #

#![cfg(target_os = "linux")]
use std::io::prelude::*;
fn output(s: &str) {
    let stdout = std::io::stdout();
    let mut token = s.split_ascii_whitespace();
    let mut writer = std::io::BufWriter::new(stdout.lock());
    unsafe {
        let n = token.next().unwrap().parse::<usize>().unwrap();
        let s = token.next().unwrap();
        writeln!(&mut writer, "{}", solve(n, s)).unwrap();
    }
}

fn main() {
    unsafe {
        use std::os::unix::io::FromRawFd;
        match std::fs::File::from_raw_fd(0).metadata() {
            Ok(metadata) if metadata.is_file() => {
                let filelen = metadata.len();
                let input = mmap(std::ptr::null_mut(), filelen as usize, 1, 2, 0, 0);
                output(std::str::from_utf8_unchecked(std::slice::from_raw_parts(
                    input,
                    filelen as usize,
                )));
            }
            _ => panic!(),
        }
    }
}

// unsafe: FFI
// (foreign function interface)
// Linux C Library (libc)
#[link(name = "c")]
extern "C" {
    pub fn mmap(
        addr: *mut u8,
        length: usize,
        prot: i32,
        flags: i32,
        fd: i32,
        off: isize,
    ) -> *mut u8;
}

const MOD: u64=998244353;

#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
#[target_feature(enable = "avx2")]
unsafe fn solve(n: usize, s: &str) -> u64 {
    if n%10>0 {
        return 0;
    }
    let mut dp=[u64::default(); 14_001];
    dp[0]=1;
    for i in 0..n/10 {
        for k in 1..=n/10-i {
            let mut ok=true;
            ok&=s.chars().nth(i*10+2*k).unwrap()!='x';
            ok&=s.chars().nth(i*10+5*k).unwrap()!='x';
            ok&=s.chars().nth(i*10+10*k).unwrap()!='x';
            if ok {
                dp[i+k]+=dp[i];
                dp[i+k]%=MOD;
            }
        }
    }
    dp[n/10]
}
0