結果
| 問題 |
No.1012 荷物収集
|
| コンテスト | |
| ユーザー |
はむ吉🐹
|
| 提出日時 | 2020-03-20 22:43:43 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,126 bytes |
| コンパイル時間 | 300 ms |
| コンパイル使用メモリ | 12,544 KB |
| 実行使用メモリ | 32,696 KB |
| 最終ジャッジ日時 | 2024-12-15 07:21:31 |
| 合計ジャッジ時間 | 15,884 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 11 WA * 30 |
ソースコード
#!/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(xs, ws, ys):
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()
はむ吉🐹