AtCoder Beginner Contest 219

A - AtCoder Quiz 2


import sys
import heapq, math, itertools
from collections import defaultdict, deque
from bisect import bisect_left, bisect_right, insort_left, insort_right
inputs = sys.stdin.readline
mod = 10**9+7
inf = float('inf')
#sys.setrecursionlimit(10**7)

def main():
  x = int(input())
  if 0<=x<40:
    print(40-x)
  elif 40<=x<70:
    print(70-x)
  elif 70<=x<90:
    print(90-x)
  else:
    print('expert')

if __name__ == '__main__':
  main()
어느 등급으로 인정되는지 판별하여 해당 등급대와 상한의 차이를 얻는다

B - Maritozzo


import sys
import heapq, math, itertools
from collections import defaultdict, deque
from bisect import bisect_left, bisect_right, insort_left, insort_right
inputs = sys.stdin.readline
mod = 10**9+7
inf = float('inf')
#sys.setrecursionlimit(10**7)

def main():
  s = [input() for _ in range(3)]
  t = input()
  ans = ''
  for c in t:
    ans += s[int(c)-1]
  print(ans)

if __name__ == '__main__':
  main()
각 문자열은 문자열 T에서 얻은 index를 통해 참고할 수 있습니다.
저는 해물탕을 먹어본 적이 없어요.

C - Neo-lexicographic Ordering


import sys
import heapq, math, itertools
from string import ascii_lowercase
from collections import defaultdict, deque
from bisect import bisect_left, bisect_right, insort_left, insort_right
inputs = sys.stdin.readline
mod = 10**9+7
inf = float('inf')
#sys.setrecursionlimit(10**7)

def main():
  x = input()
  n = int(input())
  dic = {a:b for a,b in zip(x, ascii_lowercase)}
  trans = str.maketrans(dic)
  lst = []
  for _ in range(n):
    s = input()
    lst.append((s, s.translate(trans)))
  lst = sorted(lst, key=lambda x:x[1])
  for p,q in lst:
    print(p)

if __name__ == '__main__':
  main()
문자열 X의 순서와 일반적인 소문자의 순서 간의 대응 관계를 볼 수 있다.
문자열 S str.maketrans(dict)를 입력하여 만든 사전i에 적용, 일반적인 사전 순서에 따른 문자열 S얻다
문자열 Si'정렬 후 원래 문자열 Si 순으로 AC 내보내기

D - Strange Lunchbox


import sys
import heapq, math, itertools
from collections import defaultdict, deque
from bisect import bisect_left, bisect_right, insort_left, insort_right
inputs = sys.stdin.readline
mod = 10**9+7
inf = float('inf')
#sys.setrecursionlimit(10**7)

def main():
  n = int(input())
  x,y = map(int, inputs().split())
  box = [list(map(int, inputs().split())) for _ in range(n)]
  dp = [[[inf]*(x+1) for _ in range(y+1)] for _ in range(n+1)]
  for i in range(n+1):
    dp[i][0][0] = 0
  for i in range(n):
    [a,b] = box[i]
    for j in range(y+1):
      for k in range(x+1):
        # 使わない場合
        dp[i+1][j][k] = min(dp[i][j][k], dp[i+1][j][k])

        # 使う場合
        dp[i+1][min(j+b, y)][min(k+a, x)] = min(dp[i+1][min(j+b, y)][min(k+a, x)], dp[i][j][k]+1)
  print(dp[n][y][x] if dp[n][y][x]!=inf else -1)

if __name__ == '__main__':
  main()
이하는 dp로
i개까지 사용한 도시락, 도미구이 j개와 문어구이 k개를 먹기 위한 도시락 개수 최소치
도시락을 먹지 않을 때는 도미야키와 타코야키가 모두 0개이므로 dp[i][0]=0으로 초기화해야 한다.
각 도시락이 먹거나 먹지 않는 상황에서의 변화를 고려하면 이것은 dp[n][y][x]가 요구하는 값이다.

좋은 웹페이지 즐겨찾기