| Task: | Tontti |
| Sender: | felixbade |
| Submission time: | 2015-10-11 11:15:10 +0300 |
| Language: | Python3 |
| Status: | READY |
| Result: | 0 |
| group | verdict | score |
|---|---|---|
| #1 | WRONG ANSWER | 0 |
| #2 | TIME LIMIT EXCEEDED | 0 |
| #3 | TIME LIMIT EXCEEDED | 0 |
| test | verdict | time | group | |
|---|---|---|---|---|
| #1 | WRONG ANSWER | 0.08 s | 1 | details |
| #2 | WRONG ANSWER | 0.08 s | 1 | details |
| #3 | WRONG ANSWER | 0.08 s | 1 | details |
| #4 | WRONG ANSWER | 0.10 s | 1 | details |
| #5 | WRONG ANSWER | 0.09 s | 1 | details |
| #6 | TIME LIMIT EXCEEDED | -- | 2 | details |
| #7 | TIME LIMIT EXCEEDED | -- | 2 | details |
| #8 | TIME LIMIT EXCEEDED | -- | 2 | details |
| #9 | TIME LIMIT EXCEEDED | -- | 2 | details |
| #10 | TIME LIMIT EXCEEDED | -- | 2 | details |
| #11 | TIME LIMIT EXCEEDED | -- | 3 | details |
| #12 | TIME LIMIT EXCEEDED | -- | 3 | details |
| #13 | TIME LIMIT EXCEEDED | -- | 3 | details |
| #14 | TIME LIMIT EXCEEDED | -- | 3 | details |
| #15 | TIME LIMIT EXCEEDED | -- | 3 | details |
Code
import math
from array import array
# Parse input
line = input().split()
height = int(line[0])
width = int(line[1])
desired_trees = int(line[2])
field = []
for y in range(height):
line = input()
field.extend([x == '*' for x in line])
print('A')
# Create index
index = []
for i in range(width*height):
this = 0
y, x = divmod(i, width)
if field[i]:
this = 1
if y > 0:
this += index[i-width]
if x > 0:
this += index[i-1]
if y > 0 and x > 0:
this -= index[i-width-1]
index.append(this)
#index = array('I', index) # use array instead of list for sake of speed
print('B')
# Calculate
def trees_in(x1, y1, size):
x2 = x1 + size - 1
y2 = y1 + size - 1
if x1 == 0 and y1 == 0:
return index[y2*width + x2]
elif x1 == 0:
return index[y2*width + x2] - index[(y1-1)*width + x2]
elif y1 == 0:
return index[y2*width + x2] - index[y2*width + (x1-1)]
else:
return (index[y2*width + x2] - index[(y1-1)*width + x2] -
index[y2*width + (x1-1)] + index[(y1-1)*width + (x1-1)])
options = 0
min_size = math.ceil(math.sqrt(desired_trees))
for y in range(height):
for x in range(width):
max_size = min(height-y, width-x)
# Find smallest square
min_min_size = min_size
max_min_size = max_size
while max_min_size - min_min_size > 1:
inspect_size = (max_min_size + min_min_size) // 2
inspected = trees_in(x, y, inspect_size)
print(inspect_size, inspected)
if inspected >= desired_trees:
max_min_size = inspect_size
else:
min_min_size = inspect_size
# Find largest square
min_max_size = min_min_size
max_max_size = max_size
while max_max_size - min_max_size > 1:
inspect_size = (max_max_size + min_max_size) // 2
inspected = trees_in(x, y, inspect_size)
if inspected > desired_trees:
max_max_size = inspect_size
else:
min_max_size = inspect_size
print(min_min_size, max_min_size, min_max_size, max_max_size)
options += min_max_size - max_min_size + 1
print(options)
Test details
Test 1
Group: 1
Verdict: WRONG ANSWER
| input |
|---|
| 10 10 1 ......*... .......*.. *..*....*. *....*.... ... |
| correct output |
|---|
| 94 |
| user output |
|---|
| A B 5 3 3 1 2 0 ... |
Test 2
Group: 1
Verdict: WRONG ANSWER
| input |
|---|
| 10 10 5 ********** ********** ********** ********** ... |
| correct output |
|---|
| 0 |
| user output |
|---|
| A B 6 36 4 16 3 4 3 4 ... |
Test 3
Group: 1
Verdict: WRONG ANSWER
| input |
|---|
| 10 10 10 **...*...* *..*.**.*. ...**.*..* *...**.*.. ... |
| correct output |
|---|
| 4 |
| user output |
|---|
| A B 7 24 5 12 4 5 4 5 ... |
Test 4
Group: 1
Verdict: WRONG ANSWER
| input |
|---|
| 10 10 5 ****...... *.*.**..** ....*.*..* ...*.***.. ... |
| correct output |
|---|
| 16 |
| user output |
|---|
| A B 6 17 4 7 3 4 3 4 ... |
Test 5
Group: 1
Verdict: WRONG ANSWER
| input |
|---|
| 10 10 2 **.***..*. ...*.*.... .***.*...* ***.***..* ... |
| correct output |
|---|
| 30 |
| user output |
|---|
| A B 6 20 4 10 3 4 ... |
Test 6
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 500 500 1 ................................. |
| correct output |
|---|
| 9552040 |
| user output |
|---|
| (empty) |
Test 7
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 500 500 5 ................................. |
| correct output |
|---|
| 1536063 |
| user output |
|---|
| (empty) |
Test 8
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 500 500 25000 **...*...**..*.*..*.**.*..*.*.... |
| correct output |
|---|
| 288 |
| user output |
|---|
| (empty) |
Test 9
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 500 500 12500 **.**.*..*...*.**...*.***........ |
| correct output |
|---|
| 786 |
| user output |
|---|
| (empty) |
Test 10
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 500 500 5000 .*.*.**..*.*.**.**..*..**...*.... |
| correct output |
|---|
| 1763 |
| user output |
|---|
| (empty) |
Test 11
Group: 3
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 2000 2000 1 ................................. |
| correct output |
|---|
| 489611392 |
| user output |
|---|
| (empty) |
Test 12
Group: 3
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 2000 2000 5 ................................. |
| correct output |
|---|
| 120725884 |
| user output |
|---|
| (empty) |
Test 13
Group: 3
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 2000 2000 400000 ..*..**.**.**.*.***...**.*..**... |
| correct output |
|---|
| 1849 |
| user output |
|---|
| (empty) |
Test 14
Group: 3
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 2000 2000 200000 ***.*....*.*..*....**..*..*.*.... |
| correct output |
|---|
| 2665 |
| user output |
|---|
| (empty) |
Test 15
Group: 3
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 2000 2000 80000 **.**...*.***.**....**.*....*.... |
| correct output |
|---|
| 5587 |
| user output |
|---|
| (empty) |
