본문 바로가기

알고리즘49

UCPC 2021 예선 참여 후기 openingsound, 39dll님과 함께 팀 Wrong answer on으로 참여하였다. 나는 B, H 두 문제를 풀었고, 총 다섯 문제를 풀어 64등으로 마감하였다. 비대면으로 별다른 준비 없이 시작했지만, 대회 과정이 즐거웠고 나쁘지 않은 결과로 마무리하게 되어 만족스럽다. 아래는 내가 작성한 풀이와 구현이다. B번 항체 인식 22352번: 항체 인식 첫 번째 줄에는 SP 촬영 결과의 크기를 의미하는 두 정수 $N$과 $M$이 주어진다. ($1 \le N, M \le 30$) 이는 촬영 결과가 세로로 $N$칸, 가로로 $M$칸 크기의 격자라는 것을 의미한다. 다음 $N$개의 줄에는 www.acmicpc.net 처음 상태에서 DSU로 같은 집합끼리 묶는다. 다음 상태에서 바뀐 cell이 속한 집합에.. 2021. 8. 1.
BIT struct Bit { ll cap; vector arr, tree; Bit(int size) { cap = size + 1; arr.resize(cap, 0); tree.resize(cap, 0); } void update(int i, ll x) { ll diff = x; arr[i] += x; while (i 0) { ret += tree[i]; i -= i & -i; } return ret; } }; 2021. 3. 22.
DSU int dsfind(int tar) { if (tar == root[tar]) return tar; return root[tar] = dsfind(root[tar]); } void dsmerge(int a, int b) { a = dsfind(a), b = dsfind(b); if (a != b) root[a] = b; } 2021. 3. 22.
Reply Code Challenge 2021 참여 후기 구글 해시코드 때 만난 youx님이 비슷한 대회를 같이 참여하지 않겠느냐 소개해주셔서 참가했다. 이후 39dll님도 함께하게 되어 3인팀이 되었다. 팀명은 임시로 temp00001로 했는데 결국 그대로 사용했고, 비대면으로 진행하였다. 서로 다른 인터넷 수요(Latency, Connection speed 등)를 가진 건물들을 위해 통신탑?을 적절히 설치하는 문제였다. youx님이 2차원 펜윅트리로 뭔가 하신다길래 다른 방법을 고민했고, 지도를 행정구역마냥 적당한 크기로 쪼개 수요가 많은 쪽에 통신탑을 몰아주는 그리디한 풀이를 택했다. 의외로 나쁘지 않아서 점수가 꽤 올랐고, 일부 통신탑을 직접 옮겨가며 점수를 더 긁었다. 최종 217등으로 마무리했고, 참여자가 적어서 상대적으로 좋아보인다. 지난 대회에선.. 2021. 3. 13.
구글 해시코드 짧은 후기 26일 새벽 39dll, malkoring, youx님과 만나 대회에 참여하게 되었다. 처음엔 굉장히 어색했는데, 다들 즐겜팟인걸 확인하고 어쩌다보니 다들 리듬게임 좀 하던 사람들이라 금새 분위기가 좋아졌다. 대회가 시작되고 39dll님이 빠르게 적당한 코드를 짜내 잠깐이지만 좋은 등수가 나왔다. malkoring님이 데이터를 분석해 주신 뒤론 별 진전이 없었는데, youx님이 코드를 짜 오시고 점수가 800만점 초반대로 많이 올랐다. 사실 나는 별 아이디어가 없었던지라 youx님 코드에서 상수만 조절해가며 70만점 정도 더 긁었다. 최종 2900등 정도 했고, 대회 중 분위기가 워낙 좋아서 아무래도 좋았다. 뒷풀이로 같이 오락실도 갔다. ^-^ 2021. 2. 27.
Rabin karp #include #define sad std::cout.flush(), system("pause") using namespace std; using ll = long long; using pii = pair; using pll = pair; namespace rbk { const ll x = 131, md1 = 1e9+7, md2 = 1e9+9; int plen; pll d; void init(int n) { plen = n; d = {1, 1}; for (int i = 0; i < n; ++i) { d.first = (d.first * x) % md1, d.second = (d.second * x) % md2; } } pll hash(string &s, int len = 0, int b = 0) { p.. 2021. 2. 10.