Cod sursa(job #2751069)

Utilizator redstonegamer22Andrei Ion redstonegamer22 Data 14 mai 2021 00:37:45
Problema Patrate 3 Scor 15
Compilator rs Status done
Runda Arhiva de probleme Marime 1.38 kb
use std::fs::File;
use std::io::{*};
use std::collections::BTreeSet;


fn makes_square(mut x : &(i32, i32), mut y : &(i32, i32), set : &BTreeSet<(i32, i32)>) -> bool {
    let a = (x.0 + x.1 - y.1, x.1 + y.0 - x.0);
    let b = (y.0 + x.1 - y.1, y.1 + y.0 - x.0);

    if set.contains(&a) && set.contains(&b) {
        return true;
    }

    return false;
}

fn main() {
    let mut set : BTreeSet<(i32, i32)> = BTreeSet::new();
    
    let mut input = BufReader::new(File::open("patrate3.in").unwrap());
    let mut output = BufWriter::new(File::create("patrate3.out").unwrap());

    let mut line = String::new();
    input.read_line(&mut line).unwrap();
    let n : usize = line.trim().parse().unwrap();

    let mut points : Vec<(i32, i32)> = Vec::new();

    for _i in 0..n {
        let mut line = String::new();
        input.read_line(&mut line).unwrap();

        let vars : Vec<f64> = line.split(" ").map(|x| x.trim().parse().unwrap()).collect();

        let x : i32 = (vars[0] * 1000.0) as i32;
        let y : i32 = (vars[1] * 1000.0) as i32;

        points.push((x, y));
    }

    for pr in &points {
        set.insert(*pr);
    }

    let mut counter : usize = 0;

    for i in 0..n {
        for j in 0..n {
            if i != j && makes_square(&points[i], &points[j], &set) {
                counter = counter + 1;
            }
        }
    }

    writeln!(output, "{}", counter / 4);
}