| Task: | Lehmät | 
| Sender: | okko | 
| Submission time: | 2022-11-02 22:06:09 +0200 | 
| Language: | Rust | 
| Status: | READY | 
| Result: | 100 | 
| group | verdict | score | 
|---|---|---|
| #1 | ACCEPTED | 28 | 
| #2 | ACCEPTED | 72 | 
| 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.05 s | 2 | details | 
| #7 | ACCEPTED | 0.04 s | 2 | details | 
| #8 | ACCEPTED | 0.04 s | 2 | details | 
| #9 | ACCEPTED | 0.05 s | 2 | details | 
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 | 
