Flying Cat Penguin

ゆるゆる仕事、ソフトウェアテスティング関連のことについて綴ります。

AtCoder 修行日記#51

51日目
ABCのB問題が終わりましたー!
次からは、いよいよアルゴリズムを考えられないと太刀打ちできないものが出てくるC問題を解いていきます。

勉強用のコンテンツはここから。
https://kenkoooo.com/atcoder/#/table/

進捗と一言感想

[B問題] 3問(残り0問)

ABC047:すぬけ君の塗り絵 2 イージー

参考にしてAC…よく考えれば普通に解けますね、これ…問題文で苦手意識を持ってしまった…。

w, h , n = map(int , input().split())

left = 0
right = w
lower = 0
upper = h

for i in range(n):
  x, y, a = map(int, input().split())
  
  if a == 1:
    left = max(left, x)
  elif a == 2:
    right = min(x, right)
  elif a == 3:
    lower = max(lower, y)
  elif a == 4:
    upper = min(y, upper)

if left > right or lower > upper:
    print(0)
else:
    print((right-left)*(upper-lower))
ABC054:Template Matching

マッチするにはどうしたらと思ってましたが、そもそもある領域に対して、マッチしない条件がないかを探したほうがよかったという...。
参考にしてACでした。(要復習…)

n, m = map(int, input().split())
an = [input() for _ in range(n)]
bm = [input() for _ in range(m)]

for i in range(n-m+1) :
    for j in range(n-m+1) :
      match = True
      for k in range(m) :
        for l in range(m) :
          if an[i+k][j+l] != bm[k][l] :
            match = False
            break
          else :
            continue
      if match :
        print("Yes")
        exit()
                    
print("No")
ABC075:Minesweeper

いつもよりべた書き且つ冗長なコードを書きましたが、無事作れました。
セル系の一つずつの処理は慣れてきた感があります。
ただ、他の人のを見てるとコードはもっと短い…。

h, w = map(int, input().split())
 
sn = [input() for _ in range(h)]
csn = [[0] * w for i in range(h)]
 
for i in range(h):
  for j in range(w):
    if sn[i][j] == "#" :
      csn[i][j] = -1
      if i-1 >= 0 and sn[i-1][j] == "." :
        csn[i-1][j] += 1
        
      if i+1 <= h-1 and sn[i+1][j] == "." :
        csn[i+1][j] += 1   
        
      if j-1 >= 0 and sn[i][j-1] == "." :
        csn[i][j-1] += 1
        
      if j+1 <= w-1 and sn[i][j+1] == "." :
        csn[i][j+1] += 1        
 
      if i-1 >= 0 and j-1 >= 0 and sn[i-1][j-1] == "." :
        csn[i-1][j-1] += 1
 
      if i-1 >= 0 and j+1 <= w-1  and sn[i-1][j+1] == "." :
        csn[i-1][j+1] += 1 
 
      if i+1 <= h-1 and j-1 >= 0 and sn[i+1][j-1] == "." :
        csn[i+1][j-1] += 1        
        
      if i+1 <= h-1 and j+1 <= w-1 and sn[i+1][j+1] == "." :
        csn[i+1][j+1] += 1    
        
for i in range(h):
  for j in range(w):  
    if csn[i][j] == -1 :
      print("#", end='')
    else :
      print(csn[i][j], end='')
  print()

[C問題] 1問(残り155問)

ABC137:Divide the Problems

特になし。

n = int(input())
d = [int(num) for num in input().split()]
 
d.sort()
if d[len(d)//2] == d[len(d)//2 - 1]:
  print(0)
else :
  print(d[len(d)//2] - d[len(d)//2 - 1])
目標
  • まず、今年中に茶色コーダー
学習方針

以上。