A. Regular bracket sequences (00:02)

길이 2*n의 RBS n개 출력하기

()()()()

(())()()

((()))()

(((())))

대충 이렇게 하면 됨(?)

B. Combinatorics Homework (00:09)

'A'가 a개, 'B'가 b개, 'C'가 c개 있음

WLOG

a >= b >= c라고 해보자

그럼 가장 인접한걸 적게 만드려면

'A'를 a개 배치하고 

그 사이 사이 공간 a-1개에 'B'와 'C'를 마구마구 넣으면됨

따라서 최소 갯수 = max(0, a - 1 - b - c)


반대로 인접한걸 최대로 하려면  aaabbbccccc 이런식으로 붙이면 됨

최대 갯수 = max(0, a-1) + max(0, b-1) + max(0, c-1)

뭔가 최소갯수 ~ 최대 갯수 사이에 있는 숫자들은 요리조리 섞어주면 다 될거 같아서

글케 짯음


C. Slay the dragon (00:21)

한 용 당 2가지 케이스 중에서 답이 무조건잇음.

용의 ATK를 겨우 넘는 용사 한명

용의 ATK를 겨우 못 넘는 용사 한명

요 두명 중 한명을 출정보내면 됨

lower_bound로 찾아주면댐


D. The strongest bujld (00:48 + 2 WA) 

배열을 인자로 갖는 BFS는 처음 해봤는데 되서 천만다행이었음

처음 시작은 {c[0], c[1], c[2], ... , c[n]}으로 하고 만약 이게 밴 되어있으면(set<vector<int>>로 체크)

{c[0]-1, c[1], c[2], ... , c[n]}

{c[0], c[1]-1, c[2], ... , c[n]}

...

{c[0], c[1], c[2], ... . c[n]-1}

이 애들을 큐에 넣어줌

vis 배열을 쓰는걸 까먹어서 2틀했음 ㅠ


E. Coloring (못품)

관찰한 건 

1) 첫 세로줄, 가로줄을 고정시키면 나머지는 꼼짝없이 고정된다는 것

2) 첫 세로줄, 가로줄을 고정시키면 a[i][j] = b[i] XOR c[j]라는 것

3) 첫 가로줄, 첫 세로줄 중 하나는 01010101, 1010101 처럼 계속 교대 한다는 것

4) 첫 가로줄, 첫 세로줄 중 하나를 고정시키면 나머지 줄은 자유롭게 변경가능하다는 것


뭔가 여기서 2-SAT을 하면 좋은 모양새인데

온라인 쿼리라 그게 가능한지도 모르겠고 2-SAT도 공부한지 오래되서 모르겠음 ㅜㅠ