結果
問題 | No.1596 Distance Sum in 2D Plane |
ユーザー | kyaneko999 |
提出日時 | 2021-07-09 21:42:39 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 271 ms / 2,000 ms |
コード長 | 3,772 bytes |
コンパイル時間 | 309 ms |
コンパイル使用メモリ | 86,924 KB |
実行使用メモリ | 89,336 KB |
最終ジャッジ日時 | 2023-09-14 08:15:21 |
合計ジャッジ時間 | 6,382 ms |
ジャッジサーバーID (参考情報) |
judge12 / judge11 |
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 165 ms
87,948 KB |
testcase_01 | AC | 164 ms
87,764 KB |
testcase_02 | AC | 271 ms
88,856 KB |
testcase_03 | AC | 267 ms
88,700 KB |
testcase_04 | AC | 266 ms
88,756 KB |
testcase_05 | AC | 259 ms
89,264 KB |
testcase_06 | AC | 262 ms
88,768 KB |
testcase_07 | AC | 265 ms
88,800 KB |
testcase_08 | AC | 262 ms
89,336 KB |
testcase_09 | AC | 261 ms
89,012 KB |
testcase_10 | AC | 258 ms
88,840 KB |
testcase_11 | AC | 231 ms
88,932 KB |
testcase_12 | AC | 229 ms
89,180 KB |
testcase_13 | AC | 229 ms
89,060 KB |
testcase_14 | AC | 164 ms
88,288 KB |
testcase_15 | AC | 167 ms
87,916 KB |
testcase_16 | AC | 167 ms
88,000 KB |
testcase_17 | AC | 162 ms
87,920 KB |
testcase_18 | AC | 162 ms
88,220 KB |
testcase_19 | AC | 163 ms
88,320 KB |
ソースコード
from sys import exit, stdin, setrecursionlimit from collections import deque, defaultdict, Counter from copy import deepcopy from bisect import bisect_left, bisect_right, insort_left, insort_right from heapq import heapify, heappop, heappush from itertools import product, permutations, combinations, combinations_with_replacement from functools import reduce from math import gcd, sin, cos, tan, asin, acos, atan, atan2, degrees, radians, ceil, floor, sqrt, factorial from math import pi as PI from random import randint # from decimal import Decimal setrecursionlimit(500000) INF = (1<<61)-1 EPS = 1e-10 MOD = 10**9+7 # MOD = 998244353 def input(): return stdin.readline()[:-1] def intput(): return int(stdin.readline()) def minput(): return stdin.readline()[:-1].split() def linput(): return stdin.readline()[:-1].split() def mint(): return map(int,stdin.readline().split()) def lint(): return list(map(int,stdin.readline().split())) def ilint(): return int(stdin.readline()), list(map(int,stdin.readline().split())) def lcm(x,y): return x*y//gcd(x,y) def lgcd(l): return reduce(gcd,l) def llcm(l): return reduce(lcm,l) def powmod(n,i,mod=MOD): return pow(n,mod-1+i,mod) if i<0 else pow(n,i,mod) def div2(x): return x.bit_length() def div10(x): return len(str(x))-(x==0) def popcount(x): return bin(x).count('1') def digit(x,i,max_len=None): s = str(x) if max_len: i -= max_len-len(s) return int(s[i-1]) if i>0 else 0 def digitsum(x): ans = 0 for i in range(div10(x)): ans += digit(x,i+1) return ans def pf(x,mode='counter'): C = Counter() p = 2 while x>1: k = 0 while x%p==0: x //= p k += 1 if k>0: C[p] += k p = p+2-(p==2) if p*p<x else x if mode=='counter': return C S = set([1]) for k in C: T = set() for x in S: for i in range(C[k]+1): T.add(x*(k**i)) S = T if mode=='set': return S if mode=='list': return sorted(S) def isprime(x): if x<2: return False return len(pf(x,'set'))==2 def matmul(A, B): # import numpy A1, A2 = A >> 15, A & (1 << 15) - 1 B1, B2 = B >> 15, B & (1 << 15) - 1 X = np.dot(A1, B1) % MOD Y = np.dot(A2, B2) Z = np.dot(A1 + A2, B1 + B2) - X - Y return ((X << 30) + (Z << 15) + Y) % MOD def matpow(A, N): P = np.eye(A.shape[0], dtype=np.int64) while N: if N & 1: P = matmul(P, A) A = matmul(A, A) N >>= 1 return P def zash(S): lis = sorted(S) dic = {} for i,x in enumerate(lis): dic[x] = i return lis, dic def pr(*x): print(*x, sep='', end='') if len(x) else print() def lprint(l): for x in l: print(x) def ston(c, c0='a'): return ord(c)-ord(c0) def ntos(x, c0='a'): return chr(x+ord(c0)) def judge(x, l=['Yes', 'No']): print(l[0] if x else l[1]) def debug(*x, flag=1): if flag: print(*x) ###################################################### SIZE=4*10**5 comb_table = [1]*(SIZE+1) inv_table = [1]*(SIZE+1) combinv_table = [1]*(SIZE+1) for i in range(2,SIZE+1): comb_table[i] = (comb_table[i-1] * i) % MOD inv_table[i] = (-inv_table[MOD%i] * (MOD//i)) % MOD combinv_table[i] = (combinv_table[i-1] * inv_table[i]) % MOD def comb(n,k): if k<0 or n<k: return 0 ans = comb_table[n] ans *= combinv_table[k] ans %= MOD ans *= combinv_table[n-k] ans %= MOD return ans N,M=mint() ans=2*N*comb(2*N,N)%MOD for _ in range(M): t,x,y=mint() if t==1: ans-=comb(x+y,x)*comb(2*N-(x+y+1),N-y) else: ans-=comb(x+y,y)*comb(2*N-(x+y+1),N-x) ans%=MOD print(ans)