| Task: | Robotti | 
| Sender: | onyx | 
| Submission time: | 2024-11-05 00:11:16 +0200 | 
| Language: | Rust (2021) | 
| Status: | READY | 
| Result: | 30 | 
| group | verdict | score | 
|---|---|---|
| #1 | ACCEPTED | 30 | 
| #2 | TIME LIMIT EXCEEDED | 0 | 
| test | verdict | time | group | |
|---|---|---|---|---|
| #1 | ACCEPTED | 0.00 s | 1, 2 | details | 
| #2 | ACCEPTED | 0.00 s | 1, 2 | details | 
| #3 | ACCEPTED | 0.00 s | 1, 2 | details | 
| #4 | ACCEPTED | 0.00 s | 1, 2 | details | 
| #5 | ACCEPTED | 0.00 s | 1, 2 | details | 
| #6 | ACCEPTED | 0.00 s | 1, 2 | details | 
| #7 | ACCEPTED | 0.00 s | 1, 2 | details | 
| #8 | ACCEPTED | 0.00 s | 1, 2 | details | 
| #9 | ACCEPTED | 0.00 s | 1, 2 | details | 
| #10 | ACCEPTED | 0.05 s | 1, 2 | details | 
| #11 | ACCEPTED | 0.00 s | 1, 2 | details | 
| #12 | ACCEPTED | 0.04 s | 2 | details | 
| #13 | ACCEPTED | 0.00 s | 2 | details | 
| #14 | ACCEPTED | 0.96 s | 2 | details | 
| #15 | TIME LIMIT EXCEEDED | -- | 2 | details | 
| #16 | ACCEPTED | 0.01 s | 2 | details | 
| #17 | ACCEPTED | 0.01 s | 2 | details | 
| #18 | TIME LIMIT EXCEEDED | -- | 2 | details | 
| #19 | TIME LIMIT EXCEEDED | -- | 2 | details | 
| #20 | ACCEPTED | 0.03 s | 2 | details | 
| #21 | ACCEPTED | 0.01 s | 2 | details | 
| #22 | TIME LIMIT EXCEEDED | -- | 2 | details | 
| #23 | TIME LIMIT EXCEEDED | -- | 2 | details | 
| #24 | ACCEPTED | 0.09 s | 2 | details | 
Code
use std::collections::BTreeSet;
use std::io::{BufRead, BufReader};
fn main() {
    let mut amount = String::new();
    let mut reader = BufReader::new(std::io::stdin());
    reader.read_line(&mut amount).unwrap();
    let mut building = String::with_capacity(amount.trim().parse().unwrap());
    reader.read_line(&mut building).unwrap();
    let rooms: Vec<(_, _)> = building.char_indices().collect();
    let mut robot_pos = rooms.iter().position(|&x| x.1 == 'R').unwrap();
    let mut indices: BTreeSet<_> = rooms
        .into_iter()
        .filter(|x| x.1 == '*')
        .map(|x| x.0)
        .collect();
    let max_coins = indices.len();
    indices.insert(robot_pos);
    let mut split = indices.split_off(&robot_pos);
    split.remove(&robot_pos);
    let mut left = indices.last().map(|l| robot_pos - l);
    let mut right = split.first().map(|r| r - robot_pos);
    let mut steps = 0;
    while left.is_some() || right.is_some() {
        indices.extend(split);
        if let Some(l) = left {
            // both
            if let Some(r) = right {
                if l == r {
                    break;
                }
                if l < r {
                    steps += l;
                    robot_pos -= l;
                    indices.remove(&robot_pos);
                } else {
                    steps += r;
                    robot_pos += r;
                    indices.remove(&robot_pos);
                }
                // only left
            } else {
                steps += l;
                robot_pos -= l;
                indices.remove(&robot_pos);
            }
            // only right
        } else if let Some(r) = right {
            steps += r;
            robot_pos += r;
            indices.remove(&robot_pos);
        }
        indices.insert(robot_pos);
        split = indices.split_off(&robot_pos);
        split.remove(&robot_pos);
        left = indices.last().map(|l| robot_pos - l);
        right = split.first().map(|r| r - robot_pos);
    }
    let coins = max_coins - indices.len();
    println!("{steps} {coins}");
}
Test details
Test 1
Group: 1, 2
Verdict: ACCEPTED
| input | 
|---|
| 1 R  | 
| correct output | 
|---|
| 0 0 | 
| user output | 
|---|
| 0 0 | 
Test 2
Group: 1, 2
Verdict: ACCEPTED
| input | 
|---|
| 10 ...R......  | 
| correct output | 
|---|
| 0 0 | 
| user output | 
|---|
| 0 0 | 
Test 3
Group: 1, 2
Verdict: ACCEPTED
| input | 
|---|
| 10 **.R...***  | 
| correct output | 
|---|
| 12 5 | 
| user output | 
|---|
| 12 5 | 
Test 4
Group: 1, 2
Verdict: ACCEPTED
| input | 
|---|
| 10 ***R******  | 
| correct output | 
|---|
| 0 0 | 
| user output | 
|---|
| 0 0 | 
Test 5
Group: 1, 2
Verdict: ACCEPTED
| input | 
|---|
| 1000 R................................  | 
| correct output | 
|---|
| 947 9 | 
| user output | 
|---|
| 947 9 | 
Test 6
Group: 1, 2
Verdict: ACCEPTED
| input | 
|---|
| 1000 .................................  | 
| correct output | 
|---|
| 886 9 | 
| user output | 
|---|
| 886 9 | 
Test 7
Group: 1, 2
Verdict: ACCEPTED
| input | 
|---|
| 1000 .....*..*....**..**..*......*....  | 
| correct output | 
|---|
| 1287 400 | 
| user output | 
|---|
| 1287 400 | 
Test 8
Group: 1, 2
Verdict: ACCEPTED
| input | 
|---|
| 1000 ************.*****************...  | 
| correct output | 
|---|
| 0 0 | 
| user output | 
|---|
| 0 0 | 
Test 9
Group: 1, 2
Verdict: ACCEPTED
| input | 
|---|
| 1000 ******************************...  | 
| correct output | 
|---|
| 0 0 | 
| user output | 
|---|
| 0 0 | 
Test 10
Group: 1, 2
Verdict: ACCEPTED
| input | 
|---|
| 1000 R*****************************...  | 
| correct output | 
|---|
| 999 999 | 
| user output | 
|---|
| 999 999 | 
Test 11
Group: 1, 2
Verdict: ACCEPTED
| input | 
|---|
| 1000 ******************************...  | 
| correct output | 
|---|
| 999 999 | 
| user output | 
|---|
| 999 999 | 
Test 12
Group: 2
Verdict: ACCEPTED
| input | 
|---|
| 10000 .......**........*...........*...  | 
| correct output | 
|---|
| 10971 999 | 
| user output | 
|---|
| 10971 999 | 
Test 13
Group: 2
Verdict: ACCEPTED
| input | 
|---|
| 10000 *..*....*......*.....*..*........  | 
| correct output | 
|---|
| 9999 999 | 
| user output | 
|---|
| 9999 999 | 
Test 14
Group: 2
Verdict: ACCEPTED
| input | 
|---|
| 10000 *.*.*...**.*...*....**.**.**.....  | 
| correct output | 
|---|
| 18766 5000 | 
| user output | 
|---|
| 18766 5000 | 
Test 15
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 10000 R*****************************...  | 
| correct output | 
|---|
| 9999 9999 | 
| user output | 
|---|
| (empty) | 
Test 16
Group: 2
Verdict: ACCEPTED
| input | 
|---|
| 10000 ******************************...  | 
| correct output | 
|---|
| 9999 9999 | 
| user output | 
|---|
| 9999 9999 | 
Test 17
Group: 2
Verdict: ACCEPTED
| input | 
|---|
| 200000 .................................  | 
| correct output | 
|---|
| 0 0 | 
| user output | 
|---|
| 0 0 | 
Test 18
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 200000 .................................  | 
| correct output | 
|---|
| 299934 10000 | 
| user output | 
|---|
| (empty) | 
Test 19
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 200000 **.***....**..**.....***.*..*....  | 
| correct output | 
|---|
| 299998 100000 | 
| user output | 
|---|
| (empty) | 
Test 20
Group: 2
Verdict: ACCEPTED
| input | 
|---|
| 200000 ******************************...  | 
| correct output | 
|---|
| 0 0 | 
| user output | 
|---|
| 0 0 | 
Test 21
Group: 2
Verdict: ACCEPTED
| input | 
|---|
| 200000 R................................  | 
| correct output | 
|---|
| 133765 3 | 
| user output | 
|---|
| 133765 3 | 
Test 22
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 200000 R................................  | 
| correct output | 
|---|
| 199982 5000 | 
| user output | 
|---|
| (empty) | 
Test 23
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 200000 R*****************************...  | 
| correct output | 
|---|
| 199999 199999 | 
| user output | 
|---|
| (empty) | 
Test 24
Group: 2
Verdict: ACCEPTED
| input | 
|---|
| 200000 ******************************...  | 
| correct output | 
|---|
| 199999 199999 | 
| user output | 
|---|
| 199999 199999 | 
