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도 공부한지 오래되서 모르겠음 ㅜㅠ
D bfs였네 아이고 아이고
C 둘중에 하나가 답인거 어떻게 생각했음?
겨우 넘는 용사 ATK보다 큰걸 데려가면 굳이..? 이미 겨우 넘는 용사로 이길수 있는데 방어력 손해보잖아 겨우 못넘는 용사 ATK보다 작은걸 데려가면 굳이..? ATK 맞추려면 어차피 그 차이만큼 돈 더 투자해야하잖아
나는 저 관찰 못했는데 대충 볼록한거같아서 그냥 삼분탐색 박음 ㅋㅋ
삼분탐색 안되지 않음? 그렇게했다가 터졌는데... 변수가 달랐나?
비용함수 max(0ll,def-a[x])+max(0ll,att-sum+a[x]); 개형 그려보면 \_ 와 _/ 의 합 형태라서 삼분탐색조건(unimodality)만족하는듯. 그리고 중복원소는 제거해줘야 돌아감
아 중복을 빼먹었구나