結果
| 問題 | No.1012 荷物収集 |
| コンテスト | |
| ユーザー |
はむ吉🐹
|
| 提出日時 | 2020-03-20 22:51:36 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 791 ms / 2,000 ms |
| コード長 | 1,224 bytes |
| コンパイル時間 | 110 ms |
| コンパイル使用メモリ | 12,672 KB |
| 実行使用メモリ | 41,376 KB |
| 最終ジャッジ日時 | 2024-12-15 07:38:06 |
| 合計ジャッジ時間 | 18,328 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 41 |
ソースコード
#!/usr/bin/env python3
import bisect
import itertools
class CumulativeSum(object):
def __init__(self, sequence):
self.cumulative_sum = [0]
self.cumulative_sum.extend(itertools.accumulate(sequence))
def partial_sum(self, first, last):
return self.cumulative_sum[last + 1] - self.cumulative_sum[first]
def process_queries(xs0, ws0, ys):
pairs = sorted(zip(xs0, ws0))
xs = [x for x, _ in pairs]
ws = [w for _, w in pairs]
n = len(xs)
w_cs = CumulativeSum(ws)
xw_cs = CumulativeSum(x * w for x, w in zip(xs, ws))
for y in ys:
pos = bisect.bisect(xs, y)
left_sum = y * w_cs.partial_sum(0, pos - 1) - \
xw_cs.partial_sum(0, pos - 1)
right_sum = xw_cs.partial_sum(
pos, n - 1) - y * w_cs.partial_sum(pos, n - 1)
all_sum = left_sum + right_sum
yield all_sum
def main():
n, q = (int(z) for z in input().split())
xs = []
ws = []
for _ in range(n):
x, w = (int(z) for z in input().split())
xs.append(x)
ws.append(w)
ys = [int(z) for z in input().split()]
for res in process_queries(xs, ws, ys):
print(res)
if __name__ == "__main__":
main()
はむ吉🐹