Task: | Ruudukko |
Sender: | 1 |
Submission time: | 2018-10-12 16:30:55 +0300 |
Language: | Python3 |
Status: | READY |
Result: | 45 |
group | verdict | score |
---|---|---|
#1 | ACCEPTED | 31 |
#2 | ACCEPTED | 14 |
#3 | WRONG ANSWER | 0 |
test | verdict | time | group | |
---|---|---|---|---|
#1 | ACCEPTED | 0.05 s | 1 | details |
#2 | ACCEPTED | 0.06 s | 1 | details |
#3 | ACCEPTED | 0.04 s | 1 | details |
#4 | ACCEPTED | 0.05 s | 1 | details |
#5 | ACCEPTED | 0.07 s | 1 | details |
#6 | ACCEPTED | 0.70 s | 1 | details |
#7 | ACCEPTED | 0.09 s | 1 | details |
#8 | ACCEPTED | 0.05 s | 1 | details |
#9 | ACCEPTED | 0.06 s | 1 | details |
#10 | ACCEPTED | 0.06 s | 1 | details |
#11 | ACCEPTED | 0.04 s | 2 | details |
#12 | ACCEPTED | 0.06 s | 2 | details |
#13 | ACCEPTED | 0.05 s | 2 | details |
#14 | ACCEPTED | 0.07 s | 2 | details |
#15 | ACCEPTED | 0.10 s | 2 | details |
#16 | ACCEPTED | 0.11 s | 2 | details |
#17 | ACCEPTED | 0.12 s | 2 | details |
#18 | ACCEPTED | 0.12 s | 2 | details |
#19 | ACCEPTED | 0.12 s | 2 | details |
#20 | ACCEPTED | 0.15 s | 2 | details |
#21 | WRONG ANSWER | 0.13 s | 3 | details |
#22 | WRONG ANSWER | 0.13 s | 3 | details |
#23 | WRONG ANSWER | 0.13 s | 3 | details |
#24 | WRONG ANSWER | 0.13 s | 3 | details |
#25 | WRONG ANSWER | 0.14 s | 3 | details |
#26 | WRONG ANSWER | 0.13 s | 3 | details |
#27 | WRONG ANSWER | 0.13 s | 3 | details |
#28 | WRONG ANSWER | 0.13 s | 3 | details |
#29 | WRONG ANSWER | 0.13 s | 3 | details |
#30 | WRONG ANSWER | 0.11 s | 3 | details |
Code
import copyn = 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] = symbolreturn 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 arrangementfor y in range(0, n):if board[x][y] == "A":forbiddenZones["A"][0][x] = 1forbiddenZones["A"][1][y] = 1elif board[x][y] == "B":forbiddenZones["B"][0][x] = 1forbiddenZones["B"][1][y] = 1def possibleRowCompletions(symbols, restrictedsA, restrictedsB):# find all ways to complete a row such that it contains certain symbols that cannot be placed in certain placescompletedTrails = []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 completedTrailsdef 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 1sum = 0symbols = []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] * nif 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] * nrowCompletions = possibleRowCompletions(symbols, restrictedsA, restrictedsB)if len(rowCompletions) == 0:return 0else:for row in rowCompletions:newForbidden = copy.deepcopy(forbidden)if "A" in row:newForbidden["A"][0][rowNum] = 1newForbidden["A"][1][row.index("A")] = 1if "B" in row:newForbidden["B"][0][rowNum] = 1newForbidden["B"][1][row.index("B")] = 1sum += arrangementFinder(b[0:rowNum] + [row] + b[rowNum+1:], newForbidden, rowNum + 1)return sumdef factorial(n):if n == 1:return 1else:return n * factorial(n - 1)derangementsTable = [-1]*501def derangements(n):if n == 0:return 1elif n == 1:return 0else:if derangementsTable[n] != -1:return derangementsTable[n]else:ans = (n - 1) * (derangements(n - 1) + derangements(n - 2))derangementsTable[n] = ansreturn ansif n > 5:print((factorial(n) * derangements(n)) % (10**9 + 7))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: ACCEPTED
input |
---|
10 .......... .......... .......... .......... ... |
correct output |
---|
306442892 |
user output |
---|
306442892 |
Test 12
Group: 2
Verdict: ACCEPTED
input |
---|
50 ................................. |
correct output |
---|
694861480 |
user output |
---|
694861480 |
Test 13
Group: 2
Verdict: ACCEPTED
input |
---|
111 ................................. |
correct output |
---|
555319110 |
user output |
---|
555319110 |
Test 14
Group: 2
Verdict: ACCEPTED
input |
---|
222 ................................. |
correct output |
---|
108372237 |
user output |
---|
108372237 |
Test 15
Group: 2
Verdict: ACCEPTED
input |
---|
333 ................................. |
correct output |
---|
259107857 |
user output |
---|
259107857 |
Test 16
Group: 2
Verdict: ACCEPTED
input |
---|
444 ................................. |
correct output |
---|
19906314 |
user output |
---|
19906314 |
Test 17
Group: 2
Verdict: ACCEPTED
input |
---|
497 ................................. |
correct output |
---|
224313667 |
user output |
---|
224313667 |
Test 18
Group: 2
Verdict: ACCEPTED
input |
---|
498 ................................. |
correct output |
---|
929574601 |
user output |
---|
929574601 |
Test 19
Group: 2
Verdict: ACCEPTED
input |
---|
499 ................................. |
correct output |
---|
600226043 |
user output |
---|
600226043 |
Test 20
Group: 2
Verdict: ACCEPTED
input |
---|
500 ................................. |
correct output |
---|
198353194 |
user output |
---|
198353194 |
Test 21
Group: 3
Verdict: WRONG ANSWER
input |
---|
499 ................................. |
correct output |
---|
840243733 |
user output |
---|
600226043 |
Test 22
Group: 3
Verdict: WRONG ANSWER
input |
---|
499 ........................A........ |
correct output |
---|
4146290 |
user output |
---|
600226043 |
Test 23
Group: 3
Verdict: WRONG ANSWER
input |
---|
499 B.........A...................... |
correct output |
---|
173518884 |
user output |
---|
600226043 |
Test 24
Group: 3
Verdict: WRONG ANSWER
input |
---|
499 ...A....B........................ |
correct output |
---|
20044800 |
user output |
---|
600226043 |
Test 25
Group: 3
Verdict: WRONG ANSWER
input |
---|
499 AB............................... |
correct output |
---|
2 |
user output |
---|
600226043 |
Test 26
Group: 3
Verdict: WRONG ANSWER
input |
---|
500 ................................. |
correct output |
---|
121064146 |
user output |
---|
198353194 |
Test 27
Group: 3
Verdict: WRONG ANSWER
input |
---|
500 ................................. |
correct output |
---|
848435259 |
user output |
---|
198353194 |
Test 28
Group: 3
Verdict: WRONG ANSWER
input |
---|
500 .....B........A.................. |
correct output |
---|
296240911 |
user output |
---|
198353194 |
Test 29
Group: 3
Verdict: WRONG ANSWER
input |
---|
500 .A......B........................ |
correct output |
---|
2196 |
user output |
---|
198353194 |
Test 30
Group: 3
Verdict: WRONG ANSWER
input |
---|
500 ...AB............................ |
correct output |
---|
1 |
user output |
---|
198353194 |