Pagini recente » Cod sursa (job #916438) | Cod sursa (job #2235369) | Cod sursa (job #382276) | Cod sursa (job #1348037) | Cod sursa (job #2751065)
#![feature(const_btree_new)]
use std::fs::File;
use std::io::{*};
use std::collections::BTreeSet;
static mut set : BTreeSet<(i32, i32)> = BTreeSet::new();
unsafe fn makes_square(mut x : &(i32, i32), mut y : &(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 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 {
unsafe {
set.insert(*pr);
}
}
let mut counter : usize = 0;
for i in 0..n {
for j in 0..n {
unsafe {
if i != j && makes_square(&points[i], &points[j]) {
counter = counter + 1;
}
}
}
}
writeln!(output, "{}", counter / 4);
}