Submission #68491534
Source Code Expand
use std::collections::HashMap; use proconio::input; fn main() { input! { n: usize, xy: [(i32, i32); n], }; // 傾きで線分を分類 let mut segments = HashMap::new(); for i in 0..n { for j in 0..i { let (xi, yi) = xy[i]; let (xj, yj) = xy[j]; let mut dy = yj - yi; let mut dx = xj - xi; let g = gcd(dy, dx); assert_ne!(g, 0); dy /= g; dx /= g; // dy/dx if dy.is_negative() { dy *= -1; dx *= -1; } if dy == 0 { assert_ne!(dx, 0); dx = dx.signum(); } if dx == 0 { assert_ne!(dy, 0); dy = dy.signum(); } segments.entry((dy, dx)).or_insert(Vec::new()).push((i, j)); } } let mut ans = 0_usize; for v in segments.values() { ans += v.len() * (v.len() - 1) / 2; } // 平行四辺形を引く let mut sub = 0; for v in segments.into_values() { // 長さで線分を分類、傾きは全て同じ let mut seg = HashMap::new(); for (i, j) in v { let (xi, yi) = xy[i]; let (xj, yj) = xy[j]; let dist = xi.abs_diff(xj).pow(2) + yi.abs_diff(yj).pow(2); *seg.entry(dist).or_insert(0) += 1; } for v in seg.into_values() { sub += v * (v - 1) / 2; } } assert_eq!(sub % 2, 0); ans -= sub / 2; println!("{}", ans); } fn gcd(a: i32, b: i32) -> i32 { if b == 0 { a } else { gcd(b, a % b) } }
Submission Info
Submission Time | |
---|---|
Task | E - Trapezium |
User | ikd |
Language | Rust (rustc 1.70.0) |
Score | 475 |
Code Size | 1782 Byte |
Status | AC |
Exec Time | 1128 ms |
Memory | 348000 KiB |
Judge Result
Set Name | Sample | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 475 / 475 | ||||
Status |
|
|
Set Name | Test Cases |
---|---|
Sample | 00-sample-01.txt, 00-sample-02.txt |
All | 00-sample-01.txt, 00-sample-02.txt, 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 01-23.txt, 01-24.txt, 01-25.txt, 01-26.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
00-sample-01.txt | AC | 1 ms | 1896 KiB |
00-sample-02.txt | AC | 1 ms | 2048 KiB |
01-01.txt | AC | 1 ms | 1960 KiB |
01-02.txt | AC | 30 ms | 12660 KiB |
01-03.txt | AC | 688 ms | 196632 KiB |
01-04.txt | AC | 332 ms | 101660 KiB |
01-05.txt | AC | 927 ms | 348000 KiB |
01-06.txt | AC | 934 ms | 347860 KiB |
01-07.txt | AC | 141 ms | 47924 KiB |
01-08.txt | AC | 140 ms | 47356 KiB |
01-09.txt | AC | 135 ms | 46360 KiB |
01-10.txt | AC | 102 ms | 37748 KiB |
01-11.txt | AC | 91 ms | 34280 KiB |
01-12.txt | AC | 922 ms | 205208 KiB |
01-13.txt | AC | 950 ms | 213484 KiB |
01-14.txt | AC | 706 ms | 174848 KiB |
01-15.txt | AC | 699 ms | 174904 KiB |
01-16.txt | AC | 1121 ms | 347956 KiB |
01-17.txt | AC | 1106 ms | 347888 KiB |
01-18.txt | AC | 731 ms | 186288 KiB |
01-19.txt | AC | 727 ms | 186340 KiB |
01-20.txt | AC | 732 ms | 186388 KiB |
01-21.txt | AC | 722 ms | 186292 KiB |
01-22.txt | AC | 922 ms | 347948 KiB |
01-23.txt | AC | 943 ms | 196488 KiB |
01-24.txt | AC | 1128 ms | 347876 KiB |
01-25.txt | AC | 994 ms | 212520 KiB |
01-26.txt | AC | 1092 ms | 347956 KiB |