Hackerrank solutions.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

68 lines
1.5 KiB

#!/usr/bin/python3
# https://www.hackerrank.com/challenges/arithmetic-progressions
import sys, math
def read_ints():
return [int(x) for x in sys.stdin.readline().split()]
def read_sequences(n):
a = [0] * n
d = [0] * n
p = [0] * n
for i in range(n):
ints = read_ints()
a[i] = ints[0]
d[i] = ints[1]
p[i] = ints[2]
return (a, d, p)
def pow_mod(a, b, mod, acc):
powa = a % mod
while b > 0:
if b & 1 == 1:
acc *= powa % mod
powa *= powa % mod
b >>= 1
return acc
def factorial_mod(n, mod, acc):
for i in range(2, n+1):
acc = (acc * i) % mod
return acc
def min_const_diff(a, d, p, i, j):
k = 0
v = 1
for l in range(i-1, j):
if p[l] > 0:
k += p[l]
if d[l] == 0:
v = pow_mod(a[l], p[l], 1000003, v)
else:
v = pow_mod(d[l], p[l], 1000003, v)
v = factorial_mod(k, 1000003, v)
return (k, v)
def add_powers(p, i, j, v):
for k in range(i-1, j):
p[k] += v
def answer_query(a, d, p):
ints = read_ints()
if ints[0] == 0:
k, v = min_const_diff(a, d, p, ints[1], ints[2])
print('{:d} {:d}'.format(k, v))
elif ints[0] == 1:
add_powers(p, ints[1], ints[2], ints[3])
def main():
n = int(sys.stdin.readline())
a, d, p = read_sequences(n)
q = int(sys.stdin.readline())
for i in range(q):
answer_query(a, d, p)
if __name__ == '__main__':
main()