結果
問題 |
No.1261 数字集め
|
ユーザー |
|
提出日時 | 2020-10-16 22:44:42 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,590 bytes |
コンパイル時間 | 295 ms |
コンパイル使用メモリ | 82,176 KB |
実行使用メモリ | 268,776 KB |
最終ジャッジ日時 | 2024-07-21 04:04:50 |
合計ジャッジ時間 | 38,013 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 11 WA * 83 |
ソースコード
import sys input = sys.stdin.readline N,M = map(int,input().split()) A = [0,0] + list(map(int,input().split())) def divisors(M):#Mの約数列 O(n^(0.5+e)) import math d=[] i=1 while math.sqrt(M)>=i: if M%i==0: d.append(i) if i**2!=M: d.append(M//i) i=i+1 d.sort() return d div = divisors(N) n = len(div) res = 0 mod = 10**9+7 z = N for i in range(n): for j in range(i): y,x = div[i],div[j] if y%x==0 and x!=1 and y!=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 res += tmp 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 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 print(res)