結果
| 問題 |
No.165 四角で囲え!
|
| コンテスト | |
| ユーザー |
noko2250
|
| 提出日時 | 2015-03-16 00:16:57 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 1,972 ms / 5,000 ms |
| コード長 | 1,577 bytes |
| コンパイル時間 | 226 ms |
| コンパイル使用メモリ | 82,176 KB |
| 実行使用メモリ | 79,616 KB |
| 最終ジャッジ日時 | 2024-12-26 03:25:35 |
| 合計ジャッジ時間 | 14,643 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 19 |
ソースコード
#Created on 2015/03/15 ans
import bisect
[N, B] = map(int, input().split())
X = []
Y = []
P = []
for _ in range(N) :
[x, y, p] = map(int, input().split())
X.append(x)
Y.append(y)
P.append(p)
xs = sorted(list(set(X)))
ys = sorted(list(set(Y)))
points = [[0]*len(xs) for _ in range(len(ys))]
counts = [[0]*len(xs) for _ in range(len(ys))]
for i in range(N) :
x = bisect.bisect_left(xs, X[i])
y = bisect.bisect_left(ys, Y[i])
points[y][x] += P[i]
counts[y][x] += 1
for i in range(len(ys)) :
for j in range(len(xs)) :
if i > 0 :
points[i][j] += points[i-1][j]
counts[i][j] += counts[i-1][j]
if j > 0 :
points[i][j] += points[i][j-1]
counts[i][j] += counts[i][j-1]
if i > 0 and j > 0 :
points[i][j] -= points[i-1][j-1]
counts[i][j] -= counts[i-1][j-1]
def get_sum(L, a, b, c, d) :
ret = 0
ret += L[c][d]
if a > 0 : ret -= L[a-1][d]
if b > 0 : ret -= L[c][b-1]
if a > 0 and b > 0 : ret += L[a-1][b-1]
return ret
ans = 0
#(i,j) (k, l)
for i in range(len(xs)) :
for k in range(i, len(xs)) :
j = 0
for l in range(len(ys)) :
p = get_sum(points, j, i, l, k)
if p > B :
while j <= l and p > B :
j += 1
if j <= l : p = get_sum(points, j, i, l, k)
if j <= l and p <= B :
ans = max(ans, get_sum(counts, j, i, l, k))
print(ans)
noko2250