D - Even Relation

D - Even Relation。 深さ優先探索と偶奇の性質を理解しているとできる。 import sys sys.setrecursionlimit(20000000) def dfs(node, distance): for next_node, edge_size in G[node]: if ans[next_node] »

C - GCD on Blackboard

C - GCD on Blackboard。 累積和を使ういい問題だが、難しい。 from fractions import gcd n = int(input()) A = list(map(int, input().split())) left = [0]*n right = [0]*n »

C - Many Requirements

C - Many Requirements。 C問題ながら水diffと言われている問題。 とはいえ、そこまでめちゃくちゃ難しいという感じでもない。 lis = [] res = 0 N, M, Q = map(int, input().split()) e = [list(map(int, input().split())) for i in »

C - Synthetic Kadomatsu

C - Synthetic Kadomatsu。 かなり複雑なDFSを使う問題。 まず、合成魔法のみに注目して、延長/短縮魔法は絶対値で取れる、というあたりの勘所を理解することが重要になりそう def solve(): N, A, B, C = map(int, input().split()) llist = [int(input()) for i in »

C - Monsters Battle Royale

C - Monsters Battle Royale。 ユークリッドの互除法を応用する問題。 from fractions import gcd def solve(): N = int(input()) A = [int(i) for i in input().split()] a = A[0] »

B - Foods Loved by Everyone

B - Foods Loved by Everyone。 そんなに難しくないのだけど、実装は工夫しないとごちゃごちゃになる。 import collections def solve(): N, M = map(int, input().split()) a = [] for i in range(N): tmp = list( »

D - Multiple of 2019

D - Multiple of 2019はめちゃくちゃ難しいD問題。 答えは下記のコードとなる。 def solve(): s = input() mod = 2019 remains = [0]*mod ans = 0 now = 0 remains[0] = 1 print(s[::-1]) # 文字列をreverseし、 »

C - 755

個人的にはすきな問題。 https://atcoder.jp/contests/abc114/tasks/abc114_c dfsで753が現れる数を列挙して、そのなかから753が一回づつ現れるものを足していく。 def solve(): N = int(input()) # 文字列 s で始まる七五三数の個数 def dfs(s): if int(s) > »

C-ID

C-IDについて。 座標圧縮の問題と言えるらしい。 ほしい配列はすぐにわかったけど、この方法は慣れないとスラスラ書けないな。 def solve(): N, M = map(int, input().split()) # N分の二次元配列を用意する piys = [[] for _ in range(N)] # 各県を添え字として市を格納していく for i in range(M): p, y »

D - Sum of Large Numbers

D - Sum of Large Numbers。 累積和を使ういい問題。 def solve(): N, K = map(int, input().split()) mod = 10**9+7 increments = [] for i in range(N+1) »