solved.ac Grand Arena #3

solved.ac 그랜드 아레나 #3(Division 2)에 출전해 7문제 중 2문제를 풀어 등록한 사용자 395명 중 168등을 기록했습니다. 스코어보드는 여기에서, 에디토리얼은 여기에서 확인할 수 있습니다.

30802

A, AC / 6

일단 펜의 개수부터 보겠습니다. N개의 펜을 P로 나눈 몫과 나머지를 구하면 됩니다.

티셔츠의 개수를 보겠습니다. S개의 티셔츠를 T로 나눈 몫과 나머지를 구해봅니다. 만약에 나머지가 0이라면, 나눈 몫만큼만 구매하면 됩니다. 나머지가 0이 아니라면, 결국 한 묶음을 추가로 구매해야 하므로 나눈 몫에서 1개를 더 주문해야 합니다. 모든 사이즈에 대해서 각각 구한 다음, 이 값을 모두 합해주면 됩니다.

저도 온사이트 아레나 가게 해주세요

30803

B, AC +1 / 19

왜 물탱크에 N개의 수도꼭지를 연결하는 걸까요... 수학 시험지에 딴지를 거는 것 같네요. 철수와 영희는 왜 그런 짓을 했는지에 대하여

문제는 저한테 쿼리를 날립니다. 쿼리는 두 가지 중 하나입니다.

  • 쿼리 1, i, xA_{i}을 바꿉니다.
  • 쿼리 2, i는 해당 수도꼭지를 잠그거나 엽니다.

생각해보면, 이 쿼리들은 i번째 수도꼭지만 바꾸고 나머지는 바꾸지 않습니다. 그러면, 이전 쿼리에서 나온 답을 저장해 놓고, 쿼리가 들어올 때마다 이 값만 어떻게 해볼 수 있겠습니다.

제 코드를 여기에 옮겨 보겠습니다.

import sys
n = int(sys.stdin.readline().rstrip())
a = list(map(int, sys.stdin.readline().rstrip().split()))
b = [1 for i in range(len(a))]
o = sum(a)
print(o)
q = int(sys.stdin.readline().rstrip())
for x in range(q):
    query = list(map(int, sys.stdin.readline().rstrip().split()))
    if query[0] == 1:
        if b[query[1]-1] == 0:
            a[query[1]-1] = query[2]
        else:
            o -= a[query[1]-1]
            a[query[1]-1] = query[2]
            o += query[2]
    else:
        if b[query[1]-1] == 0:
            b[query[1]-1] = 1
            o += a[query[1]-1]
        else:
            b[query[1]-1] = 0
            o -= a[query[1]-1]
    print(o)

30804

C, 시도하지 못함

탕후루 먹고 싶다

뭔가 느낌이 최장 부분 어쩌구 수열을 구하는 것 같았습니다. 그럼 문제가 생깁니다. 저는 최장 부분 수열 같은 걸 구하는 걸 몰랐습니다.

그래서 하나하나 모든 경우의 수를 구해보려고 했는데, 맞았습니다!!를 받고 싶은 제 마음과는 다르게 비효율적인 방법밖에 생각이 나지 않아 포기했습니다. 솔직히 글을 쓰고 있는 지금도 에디토리얼을 보고 있지만 뭔 소린지 모르겠습니다.


오랜만의 아레나 출전이었습니다. 레이팅 계산 공식이 변경되어 A 1310B 995가 되었다가, 이번 대회의 퍼포먼스는 A+ 1517으로 판정이 되었고, 레이팅이 B+ 1157이 되었습니다.