結果
| 問題 | 
                            No.2779 Don't make Pair
                             | 
                    
| コンテスト | |
| ユーザー | 
                             | 
                    
| 提出日時 | 2024-06-07 21:41:08 | 
| 言語 | Rust  (1.83.0 + proconio)  | 
                    
| 結果 | 
                             
                                AC
                                 
                             
                            
                         | 
                    
| 実行時間 | 37 ms / 2,000 ms | 
| コード長 | 991 bytes | 
| コンパイル時間 | 19,936 ms | 
| コンパイル使用メモリ | 389,892 KB | 
| 実行使用メモリ | 10,328 KB | 
| 最終ジャッジ日時 | 2024-06-12 04:53:05 | 
| 合計ジャッジ時間 | 18,346 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge5 / judge2 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 5 | 
| other | AC * 24 | 
ソースコード
use std::collections::HashMap;
use proconio::input;
fn main() {
    input! {
        n:usize,
        a:[usize;n],
    }
    let mut cnts0 = HashMap::new();
    let mut cnts1 = HashMap::new();
    let mut cnt0 = 0;
    let mut cnt1 = 0;
    cnts0.insert(a[0], 1);
    for i in 1..n {
        let cnt = cnts1.entry(a[i]).or_insert(0);
        if *cnt == 1 {
            cnt1 += 1;
        }
        *cnt += 1;
    }
    let mut ans = vec![];
    if cnt0 == 0 && cnt1 == 0 {
        ans.push(1);
    }
    for i in 1..n - 1 {
        let Some(cnt)=cnts1.get_mut(&a[i])else{
            return;
        };
        if *cnt == 2 {
            cnt1 -= 1;
        }
        *cnt += 1;
        let cnt = cnts0.entry(a[i]).or_insert(0);
        if *cnt == 1 {
            cnt0 += 1;
        }
        *cnt += 1;
        if cnt0 == 0 && cnt1 == 0 {
            ans.push(i + 1);
        }
    }
    println!("{}", ans.len());
    for i in ans {
        print!("{} ", i);
    }
    println!()
}