結果

問題 No.1053 ゲーミング棒
ユーザー Yukino DX.
提出日時 2024-08-22 14:35:49
言語 Rust
(1.83.0 + proconio)
結果
WA  
実行時間 -
コード長 1,076 bytes
コンパイル時間 18,136 ms
コンパイル使用メモリ 404,968 KB
実行使用メモリ 10,368 KB
最終ジャッジ日時 2024-08-22 14:36:10
合計ジャッジ時間 16,799 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 32 WA * 2
権限があれば一括ダウンロードができます

ソースコード

diff #

use proconio::input;

fn main() {
    input! {
        n:usize,
        a:[usize;n],
    }

    let mut seen = vec![false; n + 1];
    let mut prev = 0;
    let mut ok = true;
    for i in 0..n {
        if prev != a[i] && seen[a[i]] {
            ok = false;
            break;
        }

        seen[a[i]] = true;
        prev = a[i];
    }
    if ok {
        println!("0");
        return;
    }

    let mut poss = vec![vec![]; n + 1];
    for i in 0..n {
        poss[a[i]].push(i as i64);
    }

    let mut ok = true;
    for i in 0..=n {
        if poss[i].len() <= 1 {
            continue;
        }

        if !f(n, poss[i].len(), &poss[i]) {
            ok = false;
        }
    }

    let ans = if ok { 1 } else { -1 };

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

fn f(m: usize, n: usize, a: &Vec<i64>) -> bool {
    for i in 0..n {
        let l = (a[i] - a[(i as i64 - 1).rem_euclid(n as i64) as usize]).rem_euclid(m as i64);
        let r = (a[(i + 1) % n] - a[i]).rem_euclid(m as i64);
        if l != 1 && r != 1 {
            return false;
        }
    }

    true
}
0