結果
問題 | No.1261 数字集め |
ユーザー |
|
提出日時 | 2020-10-16 23:04:30 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,190 bytes |
コンパイル時間 | 345 ms |
コンパイル使用メモリ | 82,428 KB |
実行使用メモリ | 447,648 KB |
最終ジャッジ日時 | 2024-07-21 04:34:19 |
合計ジャッジ時間 | 321,933 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 43 WA * 51 |
ソースコード
import sys input = sys.stdin.readline N,M = map(int,input().split()) A = [0,0] + list(map(int,input().split())) lazy = [[] for i in range(N+1)] for i in range(2,N+1): for j in range(2,N//i+1): lazy[i*j].append(i) def calc(x,y,z=N): inv = (A[x]-A[y])*(A[y]-A[z])*(A[z]-A[x]) tmp = (A[z]-A[x]) * (pow(A[z]-1,M-1,mod) - pow(A[y]-1,M-1,mod)) tmp %= mod tmp += (A[y]-A[z]) * (pow(A[z]-1,M-1,mod) - pow(A[x]-1,M-1,mod)) tmp %= mod tmp = (tmp * pow(inv,mod-2,mod)) % mod return tmp div = [i for i in range(1,N+1) if N%i==0] res = 0 mod = 10**9+7 for d in div: if d!=1 and d!=N: for dd in lazy[d]: res += calc(dd,d) res %= mod lazy[d] = [] print(res) N_ok = [False for i in range(N+1)] for d in div: N_ok[d] = True lazy = [[] for i in range(N+1)] for _ in range(int(input())): x,y = map(int,input().split()) if y!=N: if N_ok[y]: res += calc(x,y) res %= mod else: lazy[y].append(x) else: y = x N_ok[y] = True for x in lazy[y]: res += calc(x,y) res %= mod lazy[y] = [] print(res)