Task: | Ruudukko |
Sender: | 1 |
Submission time: | 2018-10-12 16:19:03 +0300 |
Language: | Python3 |
Status: | READY |
Result: | 31 |
group | verdict | score |
---|---|---|
#1 | ACCEPTED | 31 |
#2 | WRONG ANSWER | 0 |
#3 | TIME LIMIT EXCEEDED | 0 |
test | verdict | time | group | |
---|---|---|---|---|
#1 | ACCEPTED | 0.06 s | 1 | details |
#2 | ACCEPTED | 0.06 s | 1 | details |
#3 | ACCEPTED | 0.06 s | 1 | details |
#4 | ACCEPTED | 0.06 s | 1 | details |
#5 | ACCEPTED | 0.07 s | 1 | details |
#6 | ACCEPTED | 0.68 s | 1 | details |
#7 | ACCEPTED | 0.09 s | 1 | details |
#8 | ACCEPTED | 0.06 s | 1 | details |
#9 | ACCEPTED | 0.06 s | 1 | details |
#10 | ACCEPTED | 0.06 s | 1 | details |
#11 | WRONG ANSWER | 0.05 s | 2 | details |
#12 | TIME LIMIT EXCEEDED | -- | 2 | details |
#13 | TIME LIMIT EXCEEDED | -- | 2 | details |
#14 | TIME LIMIT EXCEEDED | -- | 2 | details |
#15 | TIME LIMIT EXCEEDED | -- | 2 | details |
#16 | TIME LIMIT EXCEEDED | -- | 2 | details |
#17 | TIME LIMIT EXCEEDED | -- | 2 | details |
#18 | TIME LIMIT EXCEEDED | -- | 2 | details |
#19 | TIME LIMIT EXCEEDED | -- | 2 | details |
#20 | TIME LIMIT EXCEEDED | -- | 2 | details |
#21 | TIME LIMIT EXCEEDED | -- | 3 | details |
#22 | TIME LIMIT EXCEEDED | -- | 3 | details |
#23 | TIME LIMIT EXCEEDED | -- | 3 | details |
#24 | TIME LIMIT EXCEEDED | -- | 3 | details |
#25 | TIME LIMIT EXCEEDED | -- | 3 | details |
#26 | TIME LIMIT EXCEEDED | -- | 3 | details |
#27 | TIME LIMIT EXCEEDED | -- | 3 | details |
#28 | TIME LIMIT EXCEEDED | -- | 3 | details |
#29 | TIME LIMIT EXCEEDED | -- | 3 | details |
#30 | TIME LIMIT EXCEEDED | -- | 3 | details |
Code
import copy n = int(input()) board = [] for i in range(0, n): board.append(list(input())) def fill(l, symbol): for i in range(0, len(l)): l[i] = symbol return l # set all rows and columns for both symbols as not forbidden (value of 0) forbiddenZones = {"A": [fill(list(range(n)), 0), fill(list(range(n)), 0)], "B": [fill(list(range(n)), 0), fill(list(range(n)), 0)]} for x in range(0, n): # update forbidden zones based on initial board arrangement for y in range(0, n): if board[x][y] == "A": forbiddenZones["A"][0][x] = 1 forbiddenZones["A"][1][y] = 1 elif board[x][y] == "B": forbiddenZones["B"][0][x] = 1 forbiddenZones["B"][1][y] = 1 def possibleRowCompletions(symbols, restrictedsA, restrictedsB): # find all ways to complete a row such that it contains certain symbols that cannot be placed in certain places completedTrails = [] def searcher(remainingSymbols, rstrA, rstrB, length, trail): if len(trail) == n: completedTrails.append(trail) choices = [] if "A" in remainingSymbols and rstrA[0] != 1: choices.append("A") if "B" in remainingSymbols and rstrB[0] != 1: choices.append("B") if len(remainingSymbols) != length: choices.append(".") for choice in choices: searcher([x for x in remainingSymbols if x != choice], rstrA[1:], rstrB[1:], length - 1, trail + [choice]) searcher(symbols, restrictedsA, restrictedsB, n, []) return completedTrails def arrangementFinder(b, forbidden, rowNum): if 0 not in forbidden["A"][0] and 0 not in forbidden["A"][1] and 0 not in forbidden["B"][0] and 0 not in forbidden["B"][1]: return 1 sum = 0 symbols = [] restrictedsA = [] restrictedsB = [] if forbidden["A"][0][rowNum] == 0: symbols.append("A") for x in range(0, n): if forbidden["A"][1][x] == 1 or b[rowNum][x] != ".": restrictedsA.append(1) else: restrictedsA.append(0) else: restrictedsA = [0] * n if forbidden["B"][0][rowNum] == 0: symbols.append("B") for x in range(0, n): if forbidden["B"][1][x] == 1 or b[rowNum][x] != ".": restrictedsB.append(1) else: restrictedsB.append(0) else: restrictedsB = [0] * n rowCompletions = possibleRowCompletions(symbols, restrictedsA, restrictedsB) if len(rowCompletions) == 0: return 0 else: for row in rowCompletions: newForbidden = copy.deepcopy(forbidden) if "A" in row: newForbidden["A"][0][rowNum] = 1 newForbidden["A"][1][row.index("A")] = 1 if "B" in row: newForbidden["B"][0][rowNum] = 1 newForbidden["B"][1][row.index("B")] = 1 sum += arrangementFinder(b[0:rowNum] + [row] + b[rowNum+1:], newForbidden, rowNum + 1) return sum def factorial(n): if n == 1: return 1 else: return n * factorial(n - 1) def derangements(n): if n == 0: return 1 elif n == 1: return 0 else: return (n - 1) * (derangements(n - 1) + derangements(n - 2)) if n > 5: print(factorial(n) * derangements(n)) else: answer = arrangementFinder(board, forbiddenZones, 0) print(str(answer))
Test details
Test 1
Group: 1
Verdict: ACCEPTED
input |
---|
2 .. .. |
correct output |
---|
2 |
user output |
---|
2 |
Test 2
Group: 1
Verdict: ACCEPTED
input |
---|
2 .. A. |
correct output |
---|
1 |
user output |
---|
1 |
Test 3
Group: 1
Verdict: ACCEPTED
input |
---|
2 B. .A |
correct output |
---|
0 |
user output |
---|
0 |
Test 4
Group: 1
Verdict: ACCEPTED
input |
---|
3 ... ... ... |
correct output |
---|
12 |
user output |
---|
12 |
Test 5
Group: 1
Verdict: ACCEPTED
input |
---|
4 .... .... .... .... |
correct output |
---|
216 |
user output |
---|
216 |
Test 6
Group: 1
Verdict: ACCEPTED
input |
---|
5 ..... ..... ..... ..... ... |
correct output |
---|
5280 |
user output |
---|
5280 |
Test 7
Group: 1
Verdict: ACCEPTED
input |
---|
5 ....A ..... ..... ..... ... |
correct output |
---|
264 |
user output |
---|
264 |
Test 8
Group: 1
Verdict: ACCEPTED
input |
---|
5 B.... ..... ..... .A.B. ... |
correct output |
---|
22 |
user output |
---|
22 |
Test 9
Group: 1
Verdict: ACCEPTED
input |
---|
5 B.A.. ....A ..... A.B.. ... |
correct output |
---|
2 |
user output |
---|
2 |
Test 10
Group: 1
Verdict: ACCEPTED
input |
---|
5 A.B.. BA... .B.A. ...BA ... |
correct output |
---|
1 |
user output |
---|
1 |
Test 11
Group: 2
Verdict: WRONG ANSWER
input |
---|
10 .......... .......... .......... .......... ... |
correct output |
---|
306442892 |
user output |
---|
4844306476800 |
Test 12
Group: 2
Verdict: TIME LIMIT EXCEEDED
input |
---|
50 ................................. |
correct output |
---|
694861480 |
user output |
---|
(empty) |
Test 13
Group: 2
Verdict: TIME LIMIT EXCEEDED
input |
---|
111 ................................. |
correct output |
---|
555319110 |
user output |
---|
(empty) |
Test 14
Group: 2
Verdict: TIME LIMIT EXCEEDED
input |
---|
222 ................................. |
correct output |
---|
108372237 |
user output |
---|
(empty) |
Test 15
Group: 2
Verdict: TIME LIMIT EXCEEDED
input |
---|
333 ................................. |
correct output |
---|
259107857 |
user output |
---|
(empty) |
Test 16
Group: 2
Verdict: TIME LIMIT EXCEEDED
input |
---|
444 ................................. |
correct output |
---|
19906314 |
user output |
---|
(empty) |
Test 17
Group: 2
Verdict: TIME LIMIT EXCEEDED
input |
---|
497 ................................. |
correct output |
---|
224313667 |
user output |
---|
(empty) |
Test 18
Group: 2
Verdict: TIME LIMIT EXCEEDED
input |
---|
498 ................................. |
correct output |
---|
929574601 |
user output |
---|
(empty) |
Test 19
Group: 2
Verdict: TIME LIMIT EXCEEDED
input |
---|
499 ................................. |
correct output |
---|
600226043 |
user output |
---|
(empty) |
Test 20
Group: 2
Verdict: TIME LIMIT EXCEEDED
input |
---|
500 ................................. |
correct output |
---|
198353194 |
user output |
---|
(empty) |
Test 21
Group: 3
Verdict: TIME LIMIT EXCEEDED
input |
---|
499 ................................. |
correct output |
---|
840243733 |
user output |
---|
(empty) |
Test 22
Group: 3
Verdict: TIME LIMIT EXCEEDED
input |
---|
499 ........................A........ |
correct output |
---|
4146290 |
user output |
---|
(empty) |
Test 23
Group: 3
Verdict: TIME LIMIT EXCEEDED
input |
---|
499 B.........A...................... |
correct output |
---|
173518884 |
user output |
---|
(empty) |
Test 24
Group: 3
Verdict: TIME LIMIT EXCEEDED
input |
---|
499 ...A....B........................ |
correct output |
---|
20044800 |
user output |
---|
(empty) |
Test 25
Group: 3
Verdict: TIME LIMIT EXCEEDED
input |
---|
499 AB............................... |
correct output |
---|
2 |
user output |
---|
(empty) |
Test 26
Group: 3
Verdict: TIME LIMIT EXCEEDED
input |
---|
500 ................................. |
correct output |
---|
121064146 |
user output |
---|
(empty) |
Test 27
Group: 3
Verdict: TIME LIMIT EXCEEDED
input |
---|
500 ................................. |
correct output |
---|
848435259 |
user output |
---|
(empty) |
Test 28
Group: 3
Verdict: TIME LIMIT EXCEEDED
input |
---|
500 .....B........A.................. |
correct output |
---|
296240911 |
user output |
---|
(empty) |
Test 29
Group: 3
Verdict: TIME LIMIT EXCEEDED
input |
---|
500 .A......B........................ |
correct output |
---|
2196 |
user output |
---|
(empty) |
Test 30
Group: 3
Verdict: TIME LIMIT EXCEEDED
input |
---|
500 ...AB............................ |
correct output |
---|
1 |
user output |
---|
(empty) |