about summary refs log tree commit diff
path: root/others
diff options
context:
space:
mode:
authorRaphael McSinyx <vn.mcsinyx@gmail.com>2017-08-01 19:53:25 +0700
committerRaphael McSinyx <vn.mcsinyx@gmail.com>2017-08-01 19:53:25 +0700
commit03592e34c45c0ee5d8a3d82e76b4361813fcba7a (patch)
treedf4c1f0732105398d1cc62188ab880ff696a0d62 /others
parentaac9fb111d8b6a5d69650df3fdeeaead610f37ec (diff)
downloadcp-03592e34c45c0ee5d8a3d82e76b4361813fcba7a.tar.gz
Add others/other/colorec.py
Diffstat (limited to 'others')
-rw-r--r--others/other/README.md41
-rwxr-xr-xothers/other/colorec.py28
2 files changed, 68 insertions, 1 deletions
diff --git a/others/other/README.md b/others/other/README.md
index f901d94..4773407 100644
--- a/others/other/README.md
+++ b/others/other/README.md
@@ -463,7 +463,7 @@ Diện tích hình vuông nếu bốn điểm thoả mãn yêu cầu đề bài,
 
 ## Chọn số
 
-Cho một dãy số nguyên a<sub>1</sub>, a<sub>2</sub>, ..., a<sub>n</sub>.
+Cho một dãy số nguyên a<sub>1</sub>, a<sub>2</sub>, …, a<sub>n</sub>.
 
 ### Yêu cầu: 
 
@@ -562,3 +562,42 @@ Các số trong input không vượt quá 100.
 |                          Input                          |    Output     |
 | :-----------------------------------------------------: | :-----------: |
 | 2<br>3 3 1<br>3 3 1<br>3 3 1<br>3 3 1<br>3 3 1<br>3 2 2 | TRUE<br>FALSE |
+
+## Hình chữ nhật bốn màu
+
+Trên mặt phẳng toạ độ Đề các vuông góc Oxy cho *n* điểm phân biệt
+*A<sub>i</sub>*(*x<sub>i</sub>*, *y<sub>i</sub>*), *i* = 1, 2, …, *n*. Mỗi điểm
+*A<sub>i</sub>* được tô bởi màu *c<sub>i</sub>* ∈ {1,2,3,4}. Ta gọi hình chữ
+nhật bốn màu là hình chữ nhật thoả mãn hai điều kiện sau:
+
+* Bốn đỉnh của hình chữ nhật là bốn điểm trong *n* điểm đã cho và được tô bởi
+  bốn màu khác nhau.
+* Các cạnh của hình chữ nhật song song với một trong hai trục toạ độ.
+
+### Yêu cầu
+
+Cho biết toạ độ và màu của *n* điểm, hãy đếm số lượng hình chữ nhật bốn màu.
+
+### Dữ liệu
+
+* Dòng đầu tiên chứa số nguyên dương *n* là số lượng điểm trên mặt phẳng.
+* Dòng thứ *i* trong *n* dòng tiếp theo chứa ba số nguyên *x<sub>i</sub>*,
+  *y<sub>i</sub>*, *c<sub>i</sub>* là thông tin về toạ độ và màu của điểm thứ 
+  *i*, *i* = 1, 2, …, *n*.
+
+*Các số trên cùng một dòng được ghi cách nhau ít nhất một dấu cách.*
+
+### Kết quả
+
+Một dòng chứa số lượng hình chữ nhật đếm được.
+
+### Giới hạn
+
+* 4 ≤ *n* ≤ 100000.
+* |*x<sub>i</sub>*|, |*y<sub>i</sub>*| ≤ 200.
+
+### Ví dụ
+
+|                              COLOREC.INP                              | COLOREC.OUT |
+| --------------------------------------------------------------------- | :---------: |
+| 7<br>0 0 1<br>0 1 4<br>2 1 2<br>2 -1 3<br>0 -1 1<br>-1 -1 4<br>-1 1 1 |      2      |
diff --git a/others/other/colorec.py b/others/other/colorec.py
new file mode 100755
index 0000000..d55ac7f
--- /dev/null
+++ b/others/other/colorec.py
@@ -0,0 +1,28 @@
+#!/usr/bin/env python3
+from itertools import combinations
+
+COLORS = {1, 2, 3, 4}
+
+with open('COLOREC.INP') as f:
+    f.readline()
+    color, exes, eyes, count = {}, {}, {}, 0
+    for line in f:
+        x, y, c = map(int, line.split())
+        color[x, y] = c
+        exes.setdefault(y, [])
+        exes[y].append(x)
+        eyes.setdefault(x, [])
+        eyes[x].append(y)
+
+for v in eyes.values(): v.sort()
+for y0, l in exes.items():
+    for x0, x1 in combinations(l, 2):
+        s = COLORS - {color[x0, y0], color[x1, y0]}
+        if len(s) > 2: continue
+        for y1 in eyes[x0][y0:]:
+            try:
+                count += not s - {color[x0, y1], color[x1, y1]}
+            except:
+                continue
+
+with open('COLOREC.OUT', 'w') as f: print(count, file=f)