CSES - HIIT Open 2024 - Results
Submission details
Task:Key cutting
Sender:Viestipojat
Submission time:2024-11-16 13:25:14 +0200
Language:Rust (2021)
Status:READY
Result:
Test results
testverdicttime
#1ACCEPTED0.00 sdetails
#20.00 sdetails
#3ACCEPTED0.00 sdetails
#40.00 sdetails
#50.00 sdetails
#60.00 sdetails
#70.00 sdetails
#8ACCEPTED0.00 sdetails
#90.01 sdetails
#100.01 sdetails
#110.01 sdetails
#120.01 sdetails
#130.02 sdetails
#140.02 sdetails

Code

use std::str::FromStr;
use std::fmt::Debug;

fn read<T: FromStr>() -> Vec<T> where <T as FromStr>::Err: Debug  {
    let stdin = std::io::stdin();
    let line = stdin.lines().next().unwrap().unwrap();
    line.split_whitespace().map(T::from_str).map(|x| x.unwrap()).collect()
}

fn main() {
    let _n = read::<usize>()[0];
    let mut hs = read::<u32>();

    hs.dedup();

    let mut ll = hs.iter().enumerate().map(|(i, h)| (*h, i.wrapping_sub(1), i + 1, true)).collect::<Vec<_>>();

    let mut steps = 0;

    let mut q = hs.into_iter().enumerate().collect::<Vec<_>>();
    q.sort_by_key(|(_i, h)| *h);

    while let Some((i, _)) = q.pop() {
        let (_h, p, n, a) = ll[i];
        if a {
            ll[i].3 = false;
            steps += 1;
            let Some((hp, _pp, _np, _)) = ll.get(p) else {
                if ll.get(n).is_some() {
                    ll[n].1 = usize::MAX;
                }
                continue;
            };
            let Some((hn, _pn, _nn, _)) = ll.get(n) else {
                if ll.get(p).is_some() {
                    ll[p].2 = usize::MAX;
                }
                continue;
            };
            if hp == hn {
                ll[n].3 = false;
                let nn = ll[n].2;
                if ll.get(nn).is_some() {
                    ll[p].2 = nn;
                    ll[nn].1 = p;
                } else {
                    ll[p].2 = usize::MAX;
                }
            } else {
                ll[p].2 = n;
                ll[n].1 = p;
            }

        }
    }

    println!("{steps}");
}

Test details

Test 1

Verdict: ACCEPTED

input
3
1 2 1

correct output
2

user output
2

Test 2

Verdict:

input
1
0

correct output
0

user output
1

Test 3

Verdict: ACCEPTED

input
1
9

correct output
1

user output
1

Test 4

Verdict:

input
100
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...

correct output
0

user output
1

Test 5

Verdict:

input
100
0 0 0 1 1 0 0 0 0 1 1 1 0 1 1 ...

correct output
25

user output
26

Test 6

Verdict:

input
100
2 1 2 1 2 0 0 0 1 1 2 2 1 2 2 ...

correct output
41

user output
42

Test 7

Verdict:

input
100
36 5 10 37 94 59 20 31 64 2 58...

correct output
99

user output
100

Test 8

Verdict: ACCEPTED

input
100
228768416 32415139 952687252 6...

correct output
100

user output
100

Test 9

Verdict:

input
100000
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...

correct output
0

user output
1

Test 10

Verdict:

input
100000
1 1 1 0 0 1 0 0 0 0 1 0 1 0 0 ...

correct output
24965

user output
24966

Test 11

Verdict:

input
100000
2 1 2 2 2 2 2 1 1 0 1 1 0 1 1 ...

correct output
38968

user output
38969

Test 12

Verdict:

input
100000
4 4 5 4 4 5 0 2 2 1 4 4 1 0 5 ...

correct output
59156

user output
59157

Test 13

Verdict:

input
100000
18 5 6 16 8 10 1 7 4 15 5 9 19...

correct output
82598

user output
82599

Test 14

Verdict:

input
100000
33 37 37 86 42 38 18 10 77 57 ...

correct output
94897

user output
94898