結果
問題 | No.1044 正直者大学 |
ユーザー | vwxyz |
提出日時 | 2022-10-01 01:44:45 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 774 ms / 2,000 ms |
コード長 | 3,279 bytes |
コンパイル時間 | 96 ms |
コンパイル使用メモリ | 13,184 KB |
実行使用メモリ | 20,608 KB |
最終ジャッジ日時 | 2024-12-23 04:37:05 |
合計ジャッジ時間 | 6,070 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 51 ms
12,800 KB |
testcase_01 | AC | 50 ms
12,672 KB |
testcase_02 | AC | 54 ms
12,672 KB |
testcase_03 | AC | 52 ms
12,800 KB |
testcase_04 | AC | 51 ms
12,800 KB |
testcase_05 | AC | 138 ms
20,608 KB |
testcase_06 | AC | 774 ms
20,608 KB |
testcase_07 | AC | 53 ms
12,800 KB |
testcase_08 | AC | 50 ms
12,800 KB |
testcase_09 | AC | 52 ms
12,672 KB |
testcase_10 | AC | 52 ms
12,800 KB |
testcase_11 | AC | 53 ms
12,800 KB |
testcase_12 | AC | 132 ms
18,048 KB |
testcase_13 | AC | 468 ms
18,432 KB |
testcase_14 | AC | 126 ms
19,584 KB |
testcase_15 | AC | 173 ms
19,840 KB |
testcase_16 | AC | 468 ms
19,712 KB |
testcase_17 | AC | 199 ms
17,792 KB |
testcase_18 | AC | 313 ms
17,152 KB |
testcase_19 | AC | 118 ms
16,896 KB |
testcase_20 | AC | 73 ms
15,360 KB |
testcase_21 | AC | 114 ms
16,000 KB |
testcase_22 | AC | 90 ms
17,152 KB |
testcase_23 | AC | 123 ms
19,456 KB |
testcase_24 | AC | 108 ms
18,688 KB |
testcase_25 | AC | 112 ms
19,968 KB |
testcase_26 | AC | 124 ms
20,352 KB |
testcase_27 | AC | 52 ms
12,800 KB |
testcase_28 | AC | 50 ms
12,672 KB |
testcase_29 | AC | 57 ms
12,800 KB |
ソースコード
from ast import Mod import bisect import copy import decimal import fractions import heapq import itertools import math import random import sys import time from collections import Counter,deque,defaultdict from functools import lru_cache,reduce from heapq import heappush,heappop,heapify,heappushpop,_heappop_max,_heapify_max def _heappush_max(heap,item): heap.append(item) heapq._siftdown_max(heap, 0, len(heap)-1) def _heappushpop_max(heap, item): if heap and item < heap[0]: item, heap[0] = heap[0], item heapq._siftup_max(heap, 0) return item from math import gcd as GCD read=sys.stdin.read readline=sys.stdin.readline readlines=sys.stdin.readlines write=sys.stdout.write class MOD: def __init__(self,p,e=None): self.p=p self.e=e if self.e==None: self.mod=self.p else: self.mod=self.p**self.e def Pow(self,a,n): a%=self.mod if n>=0: return pow(a,n,self.mod) else: assert math.gcd(a,self.mod)==1 x=Extended_Euclid(a,self.mod)[0] return pow(x,-n,self.mod) def Build_Fact(self,N): assert N>=0 self.factorial=[1] if self.e==None: for i in range(1,N+1): self.factorial.append(self.factorial[-1]*i%self.mod) else: self.cnt=[0]*(N+1) for i in range(1,N+1): self.cnt[i]=self.cnt[i-1] ii=i while ii%self.p==0: ii//=self.p self.cnt[i]+=1 self.factorial.append(self.factorial[-1]*ii%self.mod) self.factorial_inve=[None]*(N+1) self.factorial_inve[-1]=self.Pow(self.factorial[-1],-1) for i in range(N-1,-1,-1): ii=i+1 while ii%self.p==0: ii//=self.p self.factorial_inve[i]=(self.factorial_inve[i+1]*ii)%self.mod def Fact(self,N): if N<0: return 0 retu=self.factorial[N] if self.e!=None and self.cnt[N]: retu*=pow(self.p,self.cnt[N],self.mod)%self.mod retu%=self.mod return retu def Fact_Inve(self,N): if self.e!=None and self.cnt[N]: return None return self.factorial_inve[N] def Comb(self,N,K,divisible_count=False): if K<0 or K>N: return 0 retu=self.factorial[N]*self.factorial_inve[K]%self.mod*self.factorial_inve[N-K]%self.mod if self.e!=None: cnt=self.cnt[N]-self.cnt[N-K]-self.cnt[K] if divisible_count: return retu,cnt else: retu*=pow(self.p,cnt,self.mod) retu%=self.mod return retu def Extended_Euclid(n,m): stack=[] while m: stack.append((n,m)) n,m=m,n%m if n>=0: x,y=1,0 else: x,y=-1,0 for i in range(len(stack)-1,-1,-1): n,m=stack[i] x,y=y,x-(n//m)*y return x,y N,M,K=map(int,readline().split()) mod=10**9+7 MD=MOD(mod) MD.Build_Fact(max(N,M)) ans=0 for n in range(1,min(N,M)+1): if N+M-2*n>=K: ans+=MD.Comb(N-1,n-1)*MD.Comb(M-1,n-1)%mod*MD.Fact(N)%mod*MD.Fact(M)%mod*MD.Pow(n,-1)%mod ans%=mod print(ans)