下のコードで回答されている方がいて、
この39行目
result *= pow(2, i + j, 1000000007) + pow(2, k + l, 1000000007) - 1
ここの処理が理解できず困っています。
こなぜi+j乗とk+l乗でかけるのでしょうか?
ご教示よろしくお願いいたします。
python
1from math import gcd 2 3N = int(input()) 4AB = [map(int, input().split()) for _ in range(N)] 5 6t = [] 7d = {} 8d[0] = {} 9d[0][0] = 0 10for a, b in AB: 11 i = gcd(a, b) 12 if i != 0: 13 a //= i 14 b //= i 15 t.append((a, b)) 16 d.setdefault(a, {}) 17 d[a].setdefault(b, 0) 18 d[a][b] += 1 19 20used = set() 21result = 1 22for a, b in t: 23 if (a, b) in used: 24 continue 25 used.add((a, b)) 26 if a == 0 and b == 0: 27 continue 28 i = d[a][b] 29 j, k, l = 0, 0, 0 30 if -a in d and -b in d[-a]: 31 j = d[-a][-b] 32 used.add((-a, -b)) 33 if -b in d and a in d[-b]: 34 k = d[-b][a] 35 used.add((-b, a)) 36 if b in d and -a in d[b]: 37 l = d[b][-a] 38 used.add((b, -a)) 39 result *= pow(2, i + j, 1000000007) + pow(2, k + l, 1000000007) - 1 40 result %= 1000000007 41result += d[0][0] - 1 42result %= 1000000007 43print(result)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/10 10:01
2020/06/10 11:08