CSES - Datatähti 2025 alku - Results
Submission details
Task:Kortit I
Sender:EmuBird
Submission time:2024-10-28 22:38:31 +0200
Language:Rust (2021)
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED12
#2ACCEPTED15
#3ACCEPTED73
Test results
testverdicttimegroup
#1ACCEPTED0.00 s1, 2, 3details
#2ACCEPTED0.00 s2, 3details
#3ACCEPTED0.01 s3details
#4ACCEPTED0.01 s3details
#5ACCEPTED0.01 s3details
#6ACCEPTED0.01 s3details
#7ACCEPTED0.01 s3details
#8ACCEPTED0.01 s3details
#9ACCEPTED0.01 s3details
#10ACCEPTED0.01 s3details
#11ACCEPTED0.01 s3details
#12ACCEPTED0.01 s3details
#13ACCEPTED0.01 s3details
#14ACCEPTED0.01 s3details
#15ACCEPTED0.01 s3details
#16ACCEPTED0.01 s3details
#17ACCEPTED0.01 s3details
#18ACCEPTED0.01 s3details
#19ACCEPTED0.01 s3details
#20ACCEPTED0.01 s3details

Code

use std::{io, mem};

fn main() {
    let stdin = io::stdin();

    let t: i32 = {
        let mut input: String = String::new();
        stdin.read_line(&mut input).unwrap();
        input.trim().parse().unwrap()
    };

    for _ in 0..t {
        let values: Vec<i32> = {
            let mut input: String = String::new();
            stdin.read_line(&mut input).unwrap();
            input.trim().split_whitespace().map(|x| x.parse::<i32>().unwrap()).collect()
        };

        let answer = generate_answer(values[0], values[1], values[2]);
        if answer.is_none() {
            println!("NO");
        } else {
            println!("YES");
            for row in answer.unwrap() {
                println!("{}", row.iter().map(|x| x.to_string()).collect::<Vec<String>>().join(" "));
            }
        }
    }
}

fn generate_answer(total_cards: i32, mut a_points: i32, mut b_points: i32) -> Option<[Vec<i32>; 2]> {
    let total_points = a_points + b_points;


    if total_points > total_cards {
        return None;
    }
    if total_points > 0 && (a_points >= total_points || b_points >= total_points) {
        return None;
    }

    let mut a_plays = Vec::new();
    let mut b_plays = Vec::new();

    if a_points == 1 && b_points == 1 {
        a_plays.push(1);
        b_plays.push(2);

        a_plays.push(2);
        b_plays.push(1);
    } else if total_points > 0 {
        // Dealing with A = 1 is a pain, but it works with B, so let's be hacky and swap them.
        let mut swapped = false;
        if a_points == 1 {
            swapped = true;
            mem::swap(&mut a_points, &mut b_points);
            mem::swap(&mut a_plays, &mut b_plays);
        }

        let temp_a_points = a_points + if b_points == 1 { 1 } else { 0 };
        for i in 1..=(temp_a_points - 1) {
            a_plays.push(i + 1);
            b_plays.push(i);
        }

        if temp_a_points > 1 {
            // Balancing (win for B)
            a_plays.push(1); // first B play
            b_plays.push(temp_a_points); // last A play so far or hardcoded
        }
        // Now both have played [1, a_points].

        for i in (a_points + 1)..=(a_points + b_points - 1) {
            a_plays.push(i);
            b_plays.push(i + 1);
        }

        if a_points > 1 && b_points > 1 {
            // Balancing (win for A)
            a_plays.push(a_points + b_points);  // last B play
            b_plays.push(a_points + 1); // first A play after last balancing or hardcoded
        }

        // Now both have also played [a_points + 1, a_points + b_points].

        if swapped {
            mem::swap(&mut a_points, &mut b_points);
            mem::swap(&mut a_plays, &mut b_plays);
        }
    }

    // Play all remaining draws.
    for i in (a_points + b_points + 1)..=total_cards {
        a_plays.push(i);
        b_plays.push(i);
    }

    return Some([a_plays, b_plays]);
}

Test details

Test 1

Group: 1, 2, 3

Verdict: ACCEPTED

input
54
4 4 0
3 1 3
3 2 2
4 0 4
...

correct output
NO
NO
NO
NO
NO
...

user output
NO
NO
NO
NO
NO
...

Test 2

Group: 2, 3

Verdict: ACCEPTED

input
284
6 1 0
5 0 2
7 1 5
7 7 5
...

correct output
NO
NO
YES
1 2 3 4 5 6 7 
2 3 4 5 6 1 7 
...

user output
NO
NO
YES
1 2 3 4 5 6 7
2 3 4 5 6 1 7
...

Test 3

Group: 3

Verdict: ACCEPTED

input
955
14 2 10
12 2 5
10 4 9
14 1 13
...

correct output
YES
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
YES
2 1 3 4 5 6 7 8 9 10 11 12 13 ...

Test 4

Group: 3

Verdict: ACCEPTED

input
869
17 12 9
16 8 4
15 9 9
17 11 15
...

correct output
NO
YES
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
NO
YES
2 3 4 5 6 7 8 1 9 10 11 12 13 ...

Test 5

Group: 3

Verdict: ACCEPTED

input
761
18 3 15
19 1 15
18 8 1
19 19 17
...

correct output
YES
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
YES
2 3 1 4 5 6 7 8 9 10 11 12 13 ...

Test 6

Group: 3

Verdict: ACCEPTED

input
925
21 14 21
20 18 18
20 7 6
21 14 9
...

correct output
NO
NO
YES
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
NO
NO
YES
2 3 4 5 6 7 1 8 9 10 11 12 13 ...

Test 7

Group: 3

Verdict: ACCEPTED

input
529
22 3 3
22 17 5
22 6 15
22 22 20
...

correct output
YES
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
YES
2 3 1 4 5 6 7 8 9 10 11 12 13 ...

Test 8

Group: 3

Verdict: ACCEPTED

input
576
23 18 9
23 16 8
23 16 13
23 16 22
...

correct output
NO
NO
NO
NO
NO
...

user output
NO
NO
NO
NO
NO
...

Test 9

Group: 3

Verdict: ACCEPTED

input
625
24 2 22
24 15 21
24 6 3
24 21 1
...

correct output
YES
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
YES
2 1 3 4 5 6 7 8 9 10 11 12 13 ...

Test 10

Group: 3

Verdict: ACCEPTED

input
676
25 16 25
25 15 2
25 15 7
25 15 16
...

correct output
NO
YES
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
NO
YES
2 3 4 5 6 7 8 9 10 11 12 13 14...

Test 11

Group: 3

Verdict: ACCEPTED

input
729
26 2 18
26 14 18
26 5 18
26 19 13
...

correct output
YES
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
YES
2 1 3 4 5 6 7 8 9 10 11 12 13 ...

Test 12

Group: 3

Verdict: ACCEPTED

input
784
27 26 7
27 14 0
27 14 5
27 14 14
...

correct output
NO
NO
YES
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
NO
NO
YES
2 3 4 5 6 7 8 9 10 11 12 13 14...

Test 13

Group: 3

Verdict: ACCEPTED

input
841
28 26 16
28 13 19
28 5 8
28 26 4
...

correct output
NO
NO
YES
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
NO
NO
YES
2 3 4 5 1 6 7 8 9 10 11 12 13 ...

Test 14

Group: 3

Verdict: ACCEPTED

input
900
29 24 15
29 13 2
29 13 7
29 13 16
...

correct output
NO
YES
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
NO
YES
2 3 4 5 6 7 8 9 10 11 12 13 1 ...

Test 15

Group: 3

Verdict: ACCEPTED

input
961
30 24 26
30 12 24
30 4 29
30 24 14
...

correct output
NO
NO
NO
NO
YES
...

user output
NO
NO
NO
NO
YES
...

Test 16

Group: 3

Verdict: ACCEPTED

input
1000
15 12 6
33 18 30
44 4 26
6 6 5
...

correct output
NO
NO
YES
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
NO
NO
YES
2 3 4 1 5 6 7 8 9 10 11 12 13 ...

Test 17

Group: 3

Verdict: ACCEPTED

input
1000
45 32 30
4 0 3
46 23 10
71 19 46
...

correct output
NO
NO
YES
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
NO
NO
YES
2 3 4 5 6 7 8 9 10 11 12 13 14...

Test 18

Group: 3

Verdict: ACCEPTED

input
1000
51 29 37
75 11 72
5 2 4
31 8 26
...

correct output
NO
NO
NO
NO
YES
...

user output
NO
NO
NO
NO
YES
...

Test 19

Group: 3

Verdict: ACCEPTED

input
1000
50 20 37
99 45 58
86 79 73
85 70 54
...

correct output
NO
NO
NO
NO
NO
...

user output
NO
NO
NO
NO
NO
...

Test 20

Group: 3

Verdict: ACCEPTED

input
1000
26 23 5
73 53 59
64 47 41
80 75 55
...

correct output
NO
NO
NO
NO
NO
...

user output
NO
NO
NO
NO
NO
...