CSES - Datatähti 2024 loppu - Results
Submission details
Task:Palindromi
Sender:EmuBird
Submission time:2024-01-20 15:01:10 +0200
Language:Rust
Status:READY
Result:0
Feedback
groupverdictscore
#10
Test results
testverdicttime
#1ACCEPTED0.00 sdetails
#2ACCEPTED0.00 sdetails
#3ACCEPTED0.00 sdetails
#40.00 sdetails
#5ACCEPTED0.00 sdetails
#6ACCEPTED0.00 sdetails
#70.00 sdetails
#80.00 sdetails
#9ACCEPTED0.00 sdetails
#10ACCEPTED0.00 sdetails
#11ACCEPTED0.00 sdetails
#12ACCEPTED0.00 sdetails
#13ACCEPTED0.00 sdetails
#14ACCEPTED0.00 sdetails
#15ACCEPTED0.00 sdetails
#16ACCEPTED0.00 sdetails
#17ACCEPTED0.00 sdetails

Code

use std::{io::stdin};

fn main() {
    let stdin = stdin();
    let (n, k): (usize, usize) = {
        let mut s = String::new();
        stdin.read_line(&mut s).unwrap();
        let mut l = s.trim_end().split_whitespace();
        (l.next().unwrap().parse().unwrap(), l.next().unwrap().parse().unwrap())
    };

    let letters: Vec<char> = "abcdefghijklmnopqrstuvwxyz".chars().collect();

    let mut palindromi = String::with_capacity(n);

    for i in 0..(k/2) {
        palindromi.insert(i, letters[i % letters.len()]);
        palindromi.insert(palindromi.len() - 1 - i, letters[i % letters.len()]);
    }
    if k % 2 != 0 {
        palindromi.insert(k / 2, letters[(k / 2 + 1) % letters.len()]);
    }
    
    let mut offset: usize = 0;
    if palindromi.len() > 0 {
        let first_palindromi_char = palindromi.chars().next().unwrap();
        let first_palindromi_char_index: usize = { 
            // Debugger crashes for some reason with letters.iter().position(|c| c == first_palindromi_char).unwrap();
            let mut index = 0;
            for (i, c) in letters.iter().enumerate() {
                if *c == first_palindromi_char {
                    index = i;
                    break;
                }
            }
            index
        };
        if (n - k - 1) % letters.len() == first_palindromi_char_index {
            offset = 1;
        }
    }

    let mut fill = String::with_capacity(n - k);
    for i in 0..(n - k) {
        fill.push(letters[(i + offset) % letters.len()]);
    }

    assert_ne!(fill.chars().last(), palindromi.chars().next());
    assert_eq!(fill.len() + palindromi.len(), n);

    println!("{}", fill + &*palindromi)
}

Test details

Test 1

Verdict: ACCEPTED

input
1 1

correct output
a

user output
b

Test 2

Verdict: ACCEPTED

input
2 1

correct output
ab

user output
ab

Test 3

Verdict: ACCEPTED

input
2 2

correct output
aa

user output
aa

Test 4

Verdict:

input
3 1

correct output
abc

user output
bcb

Test 5

Verdict: ACCEPTED

input
3 2

correct output
aab

user output
baa

Test 6

Verdict: ACCEPTED

input
3 3

correct output
aaa

user output
aca

Test 7

Verdict:

input
4 1

correct output
abca

user output
abcb

Test 8

Verdict:

input
4 2

correct output
aabc

user output
abaa

Test 9

Verdict: ACCEPTED

input
4 3

correct output
aaab

user output
baca

Test 10

Verdict: ACCEPTED

input
4 4

correct output
aaaa

user output
abba

Test 11

Verdict: ACCEPTED

input
100 1

correct output
abcabcabcabcabcabcabcabcabcabc...

user output
abcdefghijklmnopqrstuvwxyzabcd...
Truncated

Test 12

Verdict: ACCEPTED

input
100 2

correct output
aabcabcabcabcabcabcabcabcabcab...

user output
abcdefghijklmnopqrstuvwxyzabcd...
Truncated

Test 13

Verdict: ACCEPTED

input
100 5

correct output
aaaaabcabcabcabcabcabcabcabcab...

user output
abcdefghijklmnopqrstuvwxyzabcd...
Truncated

Test 14

Verdict: ACCEPTED

input
100 10

correct output
aaaaaaaaaabcabcabcabcabcabcabc...

user output
abcdefghijklmnopqrstuvwxyzabcd...
Truncated

Test 15

Verdict: ACCEPTED

input
100 50

correct output
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

user output
abcdefghijklmnopqrstuvwxyzabcd...
Truncated

Test 16

Verdict: ACCEPTED

input
100 90

correct output
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

user output
abcdefghijabcdefghijklmnopqrst...
Truncated

Test 17

Verdict: ACCEPTED

input
100 100

correct output
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

user output
abcdefghijklmnopqrstuvwxyzabcd...
Truncated