Task: | Ruudukko |
Sender: | okkokko |
Submission time: | 2022-11-01 22:46:07 +0200 |
Language: | Python3 (PyPy3) |
Status: | READY |
Result: | 61 |
group | verdict | score |
---|---|---|
#1 | ACCEPTED | 28 |
#2 | ACCEPTED | 33 |
#3 | TIME LIMIT EXCEEDED | 0 |
test | verdict | time | group | |
---|---|---|---|---|
#1 | ACCEPTED | 0.04 s | 1, 2, 3 | details |
#2 | ACCEPTED | 0.04 s | 1, 2, 3 | details |
#3 | ACCEPTED | 0.04 s | 1, 2, 3 | details |
#4 | ACCEPTED | 0.06 s | 2, 3 | details |
#5 | ACCEPTED | 0.76 s | 2, 3 | details |
#6 | ACCEPTED | 0.58 s | 2, 3 | details |
#7 | ACCEPTED | 0.22 s | 3 | details |
#8 | TIME LIMIT EXCEEDED | -- | 3 | details |
#9 | TIME LIMIT EXCEEDED | -- | 3 | details |
Code
def I():return map(int, input().split())n, = I()grid = [list(I()) for _ in range(n)]route_grid = [[None] * n for _ in range(n)]"route_grid[y][x] is how many routes can start from the tile. None if it hasn't been calculated yet"line_values_row = [[{1: 0}, 1, 1] for _ in range(n)]line_values_col = [[{1: 0}, 1, 1] for _ in range(n)]"line_values_col[x] is a list of a dict and two ints, the first int equals the greatest key value in the dict, the second is the highest known number that has the same value as the greatest key"def get_line_values_row(y: int, v: int):"""tells how many routes can start from a tile of value v and first go along row y \nsum of the route values of tiles less than v on row y""""naive"# if v in line_values_row[y][0].keys():# return line_values_row[y][0][v]# s = 0# for x in range(n):# if grid[y][x] < v:# s += route_grid[y][x]# line_values_row[y][0][v] = s# return sif v == line_values_row[y][2]:return line_values_row[y][0][line_values_row[y][1]]if (line_values_row[y][2] == v - 1) and (v - 1 not in [grid[y][x] for x in range(n)]):line_values_row[y][2] = vreturn line_values_row[y][0][line_values_row[y][1]]s = 0for x in range(n):if grid[y][x] < v:s += route_grid[y][x]line_values_row[y][0][v] = sline_values_row[y][1] = vline_values_row[y][2] = vreturn sdef get_line_values_col(x: int, v: int):"naive"if v == line_values_col[x][2]:return line_values_col[x][0][line_values_col[x][1]]if (line_values_col[x][2] == v - 1) and (v - 1 not in [grid[y][x] for y in range(n)]):line_values_col[x][2] = vreturn line_values_col[x][0][line_values_col[x][1]]s = 0for y in range(n):if grid[y][x] < v:s += route_grid[y][x]line_values_col[x][0][v] = sline_values_col[x][1] = vline_values_col[x][2] = vreturn sdef calculate_routes(y: int, x: int):number = grid[y][x]if number == 1:route_grid[y][x] = 1returnelse:route_grid[y][x] = get_line_values_col(x, number) + get_line_values_row(y, number) + 1for a in range(1, n * n + 1):ready = Truefor y in range(n):if None not in route_grid[y]:continueready = Falsex = -1while True:try:x = grid[y].index(a, x + 1)calculate_routes(y, x)except ValueError:breakif ready:breakdivisor = 10**9 + 7def summod(x):return sum(y % divisor for y in x) % divisorw = summod(map(summod, route_grid))print(w)
Test details
Test 1
Group: 1, 2, 3
Verdict: ACCEPTED
input |
---|
3 1 1 1 1 1 1 1 1 1 |
correct output |
---|
9 |
user output |
---|
9 |
Test 2
Group: 1, 2, 3
Verdict: ACCEPTED
input |
---|
3 1 2 3 6 5 4 7 8 9 |
correct output |
---|
135 |
user output |
---|
135 |
Test 3
Group: 1, 2, 3
Verdict: ACCEPTED
input |
---|
3 7 8 1 4 5 4 3 9 6 |
correct output |
---|
57 |
user output |
---|
57 |
Test 4
Group: 2, 3
Verdict: ACCEPTED
input |
---|
100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
10000 |
user output |
---|
10000 |
Test 5
Group: 2, 3
Verdict: ACCEPTED
input |
---|
100 1 2 3 4 5 6 7 8 9 10 11 12 13 ... |
correct output |
---|
187458477 |
user output |
---|
187458477 |
Test 6
Group: 2, 3
Verdict: ACCEPTED
input |
---|
100 2995 8734 1018 2513 7971 5063 ... |
correct output |
---|
964692694 |
user output |
---|
964692694 |
Test 7
Group: 3
Verdict: ACCEPTED
input |
---|
1000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
1000000 |
user output |
---|
1000000 |
Test 8
Group: 3
Verdict: TIME LIMIT EXCEEDED
input |
---|
1000 1 2 3 4 5 6 7 8 9 10 11 12 13 ... |
correct output |
---|
229147081 |
user output |
---|
(empty) |
Test 9
Group: 3
Verdict: TIME LIMIT EXCEEDED
input |
---|
1000 520283 805991 492643 75254 527... |
correct output |
---|
951147313 |
user output |
---|
(empty) |