Add others/other/colorec.py

This commit is contained in:
Nguyễn Gia Phong 2017-08-01 19:53:25 +07:00
parent aac9fb111d
commit 03592e34c4
2 changed files with 68 additions and 1 deletions

View file

@ -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 |

28
others/other/colorec.py Executable file
View file

@ -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)