CSES - Datatähti 2023 alku - Results
Submission details
Task:Lehmät
Sender:okko
Submission time:2022-11-02 22:06:09 +0200
Language:Rust
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED28
#2ACCEPTED72
Test results
testverdicttimegroup
#1ACCEPTED0.00 s1, 2details
#2ACCEPTED0.00 s1, 2details
#3ACCEPTED0.00 s1, 2details
#4ACCEPTED0.00 s1, 2details
#5ACCEPTED0.00 s1, 2details
#6ACCEPTED0.05 s2details
#7ACCEPTED0.04 s2details
#8ACCEPTED0.04 s2details
#9ACCEPTED0.05 s2details

Code

use std::io::{BufRead, BufReader};

fn find_everything(input: String, n: u16, m: u16) -> ((u16, u16), (u16, u16), Vec<(u16, u16)>) {
    let (mut a, mut b) = ((0, 0), (0, 0));
    let mut a_set = false;
    let mut cow_positions = Vec::new();
    for x in 0..n {
        for y in 0..m {
            let i: u16 = (x*(m+1)+y).into();
            let c = input.chars().nth(i.into()).unwrap();
            // println!("c: {:?}, x: {}, y: {}", c, x, y);
            // println!("index:{}", i);
            if c == '*' {
                if !a_set {
                    a = (x, y);
                    // println!("a {:?}", a);

                    a_set = true;
                } else {
                    b = (x, y);
                    // println!("b {:?}", b);
                }
            }
            else if c == '@' {
                // println!("cow added");
                cow_positions.push((x, y));
            }

        }
    }
    (a, b, cow_positions)
}

fn solve(a: (u16, u16), b: (u16, u16), cows: Vec<(u16, u16)>) -> u16 {
    let mut count = 0;

    for cow in cows.iter() {
        if cow.0 > a.0
        && cow.1 > a.1
        && cow.0 < b.0
        && cow.1 < b.1 {
            // println!("cow: {:?}", cow);
            count += 1;
        }
    }

    count
}

fn main() {
    let mut line = String::new();
    let mut input = BufReader::new(std::io::stdin());
    input.read_line(&mut line).unwrap();
    let mut split = line.split_whitespace();
    let n: u16 = split.next().unwrap().parse().unwrap();
    let m: u16 = split.next().unwrap().parse().unwrap();
    line.clear();
    for _ in 0..n {
        input.read_line(&mut line).unwrap();
    }
    let (a, b, cows) = find_everything(line, n, m);

    let ans = solve(a, b, cows);
    println!("{}", ans);
}

Test details

Test 1

Group: 1, 2

Verdict: ACCEPTED

input
3 3
***
*.*
***

correct output
0

user output
0

Test 2

Group: 1, 2

Verdict: ACCEPTED

input
3 3
***
*@*
***

correct output
1

user output
1

Test 3

Group: 1, 2

Verdict: ACCEPTED

input
5 10
...@......
..******..
@.*@@@@*.@
..******..
...

correct output
4

user output
4

Test 4

Group: 1, 2

Verdict: ACCEPTED

input
10 10
@@...@.@@@
..@@.@@..@
@.*******@
..*@....*.
...

correct output
11

user output
11

Test 5

Group: 1, 2

Verdict: ACCEPTED

input
10 10
**********
*@@@@@@@@*
*@@@@@@@@*
*@@@@@@@@*
...

correct output
64

user output
64

Test 6

Group: 2

Verdict: ACCEPTED

input
100 100
.........................@.......

correct output
60

user output
60

Test 7

Group: 2

Verdict: ACCEPTED

input
100 100
..@@..........@......@....@@.....

correct output
1507

user output
1507

Test 8

Group: 2

Verdict: ACCEPTED

input
100 100
.@..@@..@@.@..@..@..@@..@..@.....

correct output
3348

user output
3348

Test 9

Group: 2

Verdict: ACCEPTED

input
100 100
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@...

correct output
7225

user output
7225