[白俊5549]-Pithon
16011 ワード
9週目その他のアルゴリズム-5/5
5549惑星探査
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
k = int(input())
arr=[]
for i in range(n):
arr.append(list(input()))
pp = [[[0,0,0] for i in range(m+1)] for j in range(n+1)]
# 2차원 prefix sum 문제에서는 행, 열이 한 줄씩 더 필요함!!
for i in range(n):
for j in range(m):
for l in range(3):
pp[i+1][j+1][l] = pp[i+1][j][l] +pp[i][j+1][l]- pp[i][j][l]
if arr[i][j]=='J':
pp[i+1][j+1][0] += 1
elif arr[i][j]=='O':
pp[i+1][j+1][1] +=1
elif arr[i][j]=='I':
pp[i+1][j+1][2] += 1
for _ in range(k):
a, b, c, d = map(int, input().split())
answer = [0,0,0]
for i in range(3):
answer[i] = pp[c][d][i]-pp[a-1][d][i] - pp[c][b-1][i] + pp[a-1][b-1][i]
print(answer[0], answer[1], answer[2])
に注意
for i in range(n):
for j in range(m):
planet[i][j+1] = planet[i][j] # 여기
if arr[i][j]=='J':
planet[i][j+1][0] = planet[i][j][0]+1
elif arr[i][j]=='O':
planet[i][j+1][1] = planet[i][j][1]+1
elif arr[i][j]=='I':
planet[i][j+1][2] = planet[i][j][2]+1
print(planet)
コメントとしてマークされた場所を表示すると、アドレス値と値が変化すると元の配列も変化します.
に答える
まず、配列内のすべての要素を表示する必要があります.これは、数ビットO(KNM)の時間を消費し、タイムアウトを招きます.したがって,各行にprefix sumを格納して解く.理論的にはO(KN)の時間がかかりますがタイムアウトです.結局答えが見えた.
私たちが探している部分は4番で、すべて(1+3)+(1+2)-1を加えればいいです.dpだと思うかも?どうせ2 D接頭辞と問題を解くことができます.
Reference
この問題について([白俊5549]-Pithon), 我々は、より多くの情報をここで見つけました
https://velog.io/@bb2sol/백준-5549-Python
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
k = int(input())
arr=[]
for i in range(n):
arr.append(list(input()))
pp = [[[0,0,0] for i in range(m+1)] for j in range(n+1)]
# 2차원 prefix sum 문제에서는 행, 열이 한 줄씩 더 필요함!!
for i in range(n):
for j in range(m):
for l in range(3):
pp[i+1][j+1][l] = pp[i+1][j][l] +pp[i][j+1][l]- pp[i][j][l]
if arr[i][j]=='J':
pp[i+1][j+1][0] += 1
elif arr[i][j]=='O':
pp[i+1][j+1][1] +=1
elif arr[i][j]=='I':
pp[i+1][j+1][2] += 1
for _ in range(k):
a, b, c, d = map(int, input().split())
answer = [0,0,0]
for i in range(3):
answer[i] = pp[c][d][i]-pp[a-1][d][i] - pp[c][b-1][i] + pp[a-1][b-1][i]
print(answer[0], answer[1], answer[2])
for i in range(n):
for j in range(m):
planet[i][j+1] = planet[i][j] # 여기
if arr[i][j]=='J':
planet[i][j+1][0] = planet[i][j][0]+1
elif arr[i][j]=='O':
planet[i][j+1][1] = planet[i][j][1]+1
elif arr[i][j]=='I':
planet[i][j+1][2] = planet[i][j][2]+1
print(planet)
Reference
この問題について([白俊5549]-Pithon), 我々は、より多くの情報をここで見つけました https://velog.io/@bb2sol/백준-5549-Pythonテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol