# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
898603 |
2024-01-04T23:13:05 Z |
shrek27 |
Spiral (BOI16_spiral) |
Python 3 |
|
1500 ms |
3416 KB |
def number(x, y):
if x == y and x >= 0:
num = 1 + (2 * x - 1) * 2 * x
elif x == y and x < 0:
x = abs(x)
num = 1 + (2 * x + 1) * 2 * x
elif y == -x and x < 0:
x = abs(x)
num = 1 + 4 * x ** 2
elif y == -x + 1 and x >=1:
num = 1 + (2 * x - 1) ** 2
elif y > x and y > -x:
num = number(y, y) + y - x
elif y < x and y > -x + 1:
num = number(x, x) + y - x
elif y < -x + 1 and y < x:
num = number(y, y) + x - y
elif y < -x and y > x:
num = number(x, x) + x - y
return num
def intersection(x1, y1, x2, y2):
pass
def func(x1, y1, x2, y2):
count = 0
for x in range(x1, x2 + 1):
if x <= 0:
a = min(-x, y2)
b = max(x, y1)
if x > 0:
a = min(x, y2)
b = max(-x + 1, y1)
if a >= b:
a = number(x, a)
b = number(x, b)
# print('x, a, b', x, a, b)
# print((a + b) * (abs(a - b) + 1) // 2)
# print(' ')
count += (a + b) * (abs(a - b)+ 1) // 2
count = count % (10 ** 9 + 7)
for y in range(y1, y2 + 1):
if y <= 0:
a = max(x1, y + 1)
b = min(x2, -y)
elif y > 0:
a = max(x1, -y + 1)
b = min(x2, y - 1)
else:
break
if a <= b:
a = number(a, y)
b = number(b, y)
# print('y, a, b', y, a, b)
# print((a + b) * (b - a + 1) // 2)
# print(' ')
count += (a + b) * (abs(b - a) + 1) // 2
count = count % (10 ** 9 + 7)
return count
def check(x1, y1, x2, y2):
count = 0
for x in range(x1, x2 + 1):
for y in range(y1, y2 + 1):
num = number(x, y)
count += num
# print(x, y, num)
count = count % (10 ** 9 + 7)
return count
def squaresSum(a, b):
f = lambda n : n * (n + 1) * (2 * n + 1) // 6
return f(b) - f(a - 1)
def cubeSum(a, b):
f = lambda n : (n * (n + 1) // 2) ** 2
return f(b) - f(a - 1)
def linSum(a, b):
return (a + b) * (b - a + 1) // 2
def corner(x2, y2):
a = min(x2, y2)
count = 0
count += 8 * cubeSum(1, a) + a + 1
if y2 > x2:
upper = (a + 1) * (8 * squaresSum(a + 1, y2) - 2 * linSum(a + 1, y2) + (2 - a) * (y2 - a)) // 2
count += upper
elif x2 > y2:
right = (a + 1) * (8 * squaresSum(a + 1, x2) - 6 * linSum(a + 1, x2) + (2 + a) * (x2 - a)) // 2
count += right
return count
n, q = input().split(' ')
n, q = int(n), int(q)
for i in range(q):
x = input()
x1, y1, x2, y2 = x.split(' ')
x1, y1, x2, y2 = int(x1), int(y1), int(x2), int(y2)
if x1 == 0 and y1 == 0:
ar = corner(x2, y2)
else:
ar = func(x1, y1, x2, y2)
print(ar)
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
217 ms |
3416 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
13 ms |
3164 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
217 ms |
3416 KB |
Output is correct |
2 |
Execution timed out |
1520 ms |
3352 KB |
Time limit exceeded |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
1568 ms |
3148 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
217 ms |
3416 KB |
Output is correct |
2 |
Correct |
13 ms |
3164 KB |
Output is correct |
3 |
Execution timed out |
1520 ms |
3352 KB |
Time limit exceeded |
4 |
Halted |
0 ms |
0 KB |
- |