Skip to content

Instantly share code, notes, and snippets.

@maehrm
maehrm / r06h_ap_pm3_3.py
Created April 23, 2024 11:58
令和6年度春期応用技術者試験_午後_問3
import heapq
def distance():
N = 5 # ノードの個数
INF = float("inf") # 十分大きい定数
# edge[m, n]には、ノードmからノードnへの距離を格納
# 二つのノードが隣接していない場合には INF を格納
edge = [
[INF, 10, 16, INF, INF],
@maehrm
maehrm / r06h_ap_pm3_2.py
Created April 23, 2024 11:57
令和6年度春期応用技術者試験_午後_問3
def distance():
N = 5 # ノードの個数
INF = float("inf") # 十分大きい定数
# edge[m, n]には、ノードmからノードnへの距離を格納
# 二つのノードが隣接していない場合には INF を格納
edge = [
[INF, 10, 16, INF, INF],
[10, INF, 4, 3, INF],
[16, 4, INF, 2, 3],
[INF, 3, 2, INF, 6],
@maehrm
maehrm / r06h_ap_pm3_1.py
Created April 23, 2024 11:56
令和6年度春期応用技術者試験_午後_問3
def distance():
N = 5 # ノードの個数
INF = float("inf") # 十分大きい定数
# edge[m, n]には、ノードmからノードnへの距離を格納
# 二つのノードが隣接していない場合には INF を格納
edge = [
[INF, 10, 16, INF, INF],
[10, INF, 4, 3, INF],
[16, 4, INF, 2, 3],
[INF, 3, 2, INF, 6],
import sys
input = sys.stdin.readline
N, M, Q = map(int, input().split())
G = [[] for _ in range(N)]
for _ in range(M):
x, y = map(lambda n: int(n) - 1, input().split())
G[y].append(x) # 子が親へのポインタを持つようなグラフ
ans = []
for i in range(N):
# MLEになるバージョン
import sys
sys.setrecursionlimit(10**7)
input = sys.stdin.readline
def dfs(n):
if (dp[n] >> n) & 1:
return dp[n]
N = int(input())
A = list(map(int, input().split()))
s = sum(A)
dp = 1
for i in range(N):
dp |= dp << A[i]
ans = (s + 1) // 2
while ans <= 2000 * 2000 + 1:
if (dp >> ans) & 1:
break
INF = 10**10
N, M = map(int, input().split())
A = list(map(int, input().split()))
dp = [INF] * N # dp[i]:町iの上流をたどって見たとき、金1kgを買える最安値
G = [[] for _ in range(N)]
for _ in range(M):
x, y = map(lambda n: int(n) - 1, input().split())
G[x].append(y)
import sys
sys.setrecursionlimit(10**7)
dir = [(1, 0), (0, 1), (-1, 0), (0, -1)]
MOD = 10**9 + 7
def dfs(x, y):
if dp[y][x] != 0:
return dp[y][x]
@maehrm
maehrm / GR_q4_1.py
Created April 7, 2024 09:14
『群論への第一歩』問題4-1
for g in range(12):
s = set()
i = 0
while True:
v = (g * i) % 12
if v in s:
break
s.add(v)
i += 1
print(f"<{g:>2}> = {s}")
import sys
sys.setrecursionlimit(10**7)
def dfs(v):
if dp[v] != -1: # 調査済み
return dp[v]
ret = 0
for nxt in G[v]: