[白俊]1782775-Python 3
2775.私は女性会長になります。
https://www.acmicpc.net/problem/2775
私の答え-成功
from sys import stdin
T = int(stdin.readline())
dp = []
for i in range(T):
k = int(stdin.readline())
n = int(stdin.readline())
nums = [i for i in range(n+1)]
ans = 0
for _ in range(k):
for j in range(1, n+1):
nums[j] += nums[j-1]
print(nums[-1])
0階に1~n番、i番にi名があります.nums=[1,2,3,...,n]初期化
自分の下(a-1)階の1番からb番まで、人々の数の和を満たす.
0層からk層まで累積和を繰り返し求めればよい.
迷宮を探る
https://www.acmicpc.net/problem/2178
マイプール-タイムアウト(再帰)
import sys
sys.setrecursionlimit(10**9)
N, M = map(int, sys.stdin.readline().split())
mat = []
for i in range(N):
mat.append([0]*M)
for i in range(N):
s = sys.stdin.readline().strip()
for j in range(M):
mat[i][j] = int(s[j])
ans = N*M
def func(m, i, j, cnt):
global ans
if i == N-1 and j == M-1:
ans = min(ans, cnt)
return
if cnt > ans:
return
tmp = m[i][j]
m[i][j] = 0
if i-1 >= 0 and mat[i-1][j]:
func(m, i-1, j, cnt+1)
if i+1 < N and mat[i+1][j]:
func(m, i+1, j, cnt+1)
if j-1 >= 0 and mat[i][j-1]:
func(m, i, j-1, cnt+1)
if j+1 < M and mat[i][j+1]:
func(m, i, j+1, cnt+1)
m[i][j] = tmp
func(mat, 0, 0, 1)
print(ans)
ダンジョンをマットに保存(0,0)から現在の位置に関連付けられたパスに戻る
この場合、経過した値はすべてゼロになります.
(N-1,M-1)ansを最高値に更新
でも….タイムアウト...予想していた...
マイプールタイムアウト(queue)
from sys import stdin
import collections
N, M = map(int, stdin.readline().split())
dp = []
mat = []
for i in range(N):
dp.append([N*M]*M)
mat.append([0]*M)
for i in range(N):
s = stdin.readline().strip()
for j in range(M):
mat[i][j] = int(s[j])
dp[-1][-1] = 1
queue = collections.deque([(N-1, M-1)])
while queue:
i, j = queue.popleft()
mat[i][j] = 0
if i == 0 and j == 0:
break
if i-1 >= 0 and mat[i-1][j]:
dp[i-1][j] = dp[i][j]+1
queue.append((i-1, j))
if i+1 < N and mat[i+1][j]:
dp[i+1][j] = dp[i][j]+1
queue.append((i+1, j))
if j-1 >= 0 and mat[i][j-1]:
dp[i][j-1] = dp[i][j]+1
queue.append((i, j-1))
if j+1 < M and mat[i][j+1]:
dp[i][j+1] = dp[i][j]+1
queue.append((i, j+1))
print(dp[0][0])
終了値から表示を開始し、(0,0)を返します.宛先値(N-1,M-1)を格納するためにdeque形式のqueueを作成する
queue値がポップアップされ、接続の場所が検索され、queueに追加されます.
過去の場所はこれ以上見る必要がないので、mat[i][j]=0
このとき、dp値は現在値+1に更新される
break一番早く到着(0,0)
でも….これも.タイムアウト...
=>matの値は変わらず、別途アクセスを作成し、使用後にパスしました
エクスポート-成功(queue)
from sys import stdin
import collections
N, M = map(int, stdin.readline().split())
visited = []
dp = []
mat = []
for i in range(N):
dp.append([0]*M)
mat.append([0]*M)
visited.append([0]*M)
for i in range(N):
s = stdin.readline().strip()
for j in range(M):
mat[i][j] = int(s[j])
dp[0][0] = 1
visited[0][0] = 1
queue = collections.deque([(0, 0)])
while queue:
i, j = queue.popleft()
if i-1 >= 0 and visited[i-1][j] == 0 and mat[i-1][j] == 1:
dp[i-1][j] = dp[i][j]+1
visited[i-1][j] = 1
queue.append((i-1, j))
if i+1 < N and visited[i+1][j] == 0 and mat[i+1][j] == 1:
dp[i+1][j] = dp[i][j]+1
visited[i+1][j] = 1
queue.append((i+1, j))
if j-1 >= 0 and visited[i][j-1] == 0 and mat[i][j-1] == 1:
dp[i][j-1] = dp[i][j]+1
visited[i][j-1] = 1
queue.append((i, j-1))
if j+1 < M and visited[i][j+1] == 0 and mat[i][j+1] == 1:
dp[i][j+1] = dp[i][j]+1
visited[i][j+1] = 1
queue.append((i, j+1))
print(dp[N-1][M-1])
アクセスが0でmatが1の場合にのみappendをキューに追加他人の解答
from sys import stdin
import collections
# dx[0], dy[0] => 오른쪽
# dx[1], dy[1] => 왼쪽
# dx[2], dy[2] => 아래
# dx[3], dy[3] => 위
dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]
N, M = map(int, stdin.readline().split())
visited = []
dp = []
mat = []
for i in range(N):
dp.append([0]*M)
mat.append([0]*M)
visited.append([0]*M)
for i in range(N):
s = stdin.readline().strip()
for j in range(M):
mat[i][j] = int(s[j])
dp[0][0] = 1
visited[0][0] = 1
queue = collections.deque([(0, 0)])
while queue:
i, j = queue.popleft()
for k in range(4):
nx, ny = i+dx[k], j+dy[k]
if 0 <= nx < N and 0 <= ny < M:
if visited[nx][ny] == 0 and mat[nx][ny] == 1:
dp[nx][ny] = dp[i][j] + 1
visited[nx][ny] = 1
queue.append((nx, ny))
print(dp[N-1][M-1])
4方向に関する情報をdx,dyに入れてfor文として扱う(注-ifゲート4個はforゲートより速い)
nx、nyが範囲内の場合、dp値の更新&アクセス=1&appendをキューに追加
注意)2 D配列がある場合は、1行として処理できます.
mat = [list(map(int, list(input()))) for _ in range(N)]
Reference
この問題について([白俊]1782775-Python 3), 我々は、より多くの情報をここで見つけました https://velog.io/@jsh5408/백준-2178-2775-Python3テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol