結果
問題 | No.1079 まお |
ユーザー |
![]() |
提出日時 | 2020-05-18 14:32:43 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
WA
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 1,284 bytes |
コンパイル時間 | 365 ms |
コンパイル使用メモリ | 12,672 KB |
実行使用メモリ | 33,556 KB |
最終ジャッジ日時 | 2024-10-01 22:46:27 |
合計ジャッジ時間 | 44,485 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 15 WA * 1 TLE * 14 |
ソースコード
import sysfrom collections import defaultdictread = sys.stdin.buffer.readreadline = sys.stdin.buffer.readlinereadlines = sys.stdin.buffer.readlinesN, K, *A = map(int, read().split())def f(K, A, B):INF = 10**9 + 10# B の状態nums = defaultdict(int)sums = defaultdict(int)p = 0ret = 0# A の状態min_value, min_cnt = INF, 1for i, a in enumerate(A, 1):if a == min_value:min_cnt += 1elif a < min_value:min_value = amin_cnt = 1if min_cnt >= 2:continuewhile p < len(B):b = B[p]if b > min_value:nums[b] += 1sums[b] += p + 1else:breakp += 1ret += nums[K - a] * i + sums[K - a]return retdef solve(K, A, L, R):# 半開区間[L,R)if R - L == 1:return A[L] * 2 == KM = (L + R) // 2ret = solve(K, A, L, M) + solve(K, A, M, R)# あとはM-1, Mを含むような解を求める。一意な最小値がどちらにあるかで。left_nums = A[L:M][::-1]right_nums = A[M:R]ret += f(K, left_nums, right_nums)ret += f(K, right_nums, left_nums)return retprint(solve(K, A, 0, N))