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 \n sum 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 s if 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] = v return line_values_row[y][0][line_values_row[y][1]] s = 0 for x in range(n): if grid[y][x] < v: s += route_grid[y][x] line_values_row[y][0][v] = s line_values_row[y][1] = v line_values_row[y][2] = v return s def 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] = v return line_values_col[x][0][line_values_col[x][1]] s = 0 for y in range(n): if grid[y][x] < v: s += route_grid[y][x] line_values_col[x][0][v] = s line_values_col[x][1] = v line_values_col[x][2] = v return s def calculate_routes(y: int, x: int): number = grid[y][x] if number == 1: route_grid[y][x] = 1 return else: route_grid[y][x] = get_line_values_col(x, number) + get_line_values_row(y, number) + 1 for a in range(1, n * n + 1): ready = True for y in range(n): if None not in route_grid[y]: continue ready = False x = -1 while True: try: x = grid[y].index(a, x + 1) calculate_routes(y, x) except ValueError: break if ready: break divisor = 10**9 + 7 def summod(x): return sum(y % divisor for y in x) % divisor w = 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) |