AtCoder Beginner Contest 210 C. Colorful Candies 길이가 \(K\)인 구간을 투 포인터로 관리하면서 양 끝에서 새로운 수가 추가되는지, 사라지는지를 확인하면 된다. D. National Railway 두 지점을 고르는 것은 두 가지 경우가 있다. 1) 왼쪽 위와 오른쪽 아래 (\(i\le i',\ j\le j'\)) 2) 오른쪽 위와 왼쪽 아래 (\(i\le i' \ j\ge j'\)) 1)의 경우는 \(A_{i,j}+A_{i',j'}+(i'-i)+(j'-j)\)이다. 연관된 것끼리 묶으면, \((A_{i,j}-i-j)+(A_{i',j'}+i'+j')\)이 되므로, 오른쪽 아래 점이 \((i',j')\)가 되는 경우의 최솟값은 \(i\le i',\ j\le j'\)인..
AtCoder Beginner Contest 187 E. Through Path 우선 \(1\)번 쿼리와 \(2\)번 쿼리는 \(a\)와 \(b\)만 바뀐거니 \(1\)번 쿼리를 기준으로 생각할 수 있다. 일단 아무 노드나 루트 노드로 잡아서 트리를 만든다. 만약 \(a\)가 \(b\)의 자식노드라면, \(a\)의 서브트리 내의 모든 노드에 \(x\)를 더하면 된다. 만약 \(a\)가 \(b\)의 부모노드라면, \(a\)의 서브트리를 제외한 모든 노드에 \(x\)를 더하면 된다. 그리고 이 작업은 lazy propagation을 하듯이 각 노드에 자신의 서브트리에 더해야될 값을 저장해둔 뒤 모든 쿼리가 끝난 후 계산을 해주면 된다. F. Close Group 일단 \(N\)이 엄청 작다. 처음엔 \(9!..
AtCoder Beginner Contest 120 A - Favorite Sound 문제 설명대로, \(\min (\lfloor \frac{b}{a} \rfloor,c)\)를 출력하면 된다.12345678910#include int main() { int a, b, c; scanf("%d %d %d", &a, &b, &c); printf("%d", std::min(b / a, c)); return 0;}Colored by Color Scriptercs B - K-th Common Divisor \(\max (a,b)\)부터 공약수를 세서 \(K\)번째 공약수를 출력하면 된다.1234567891011121314151617181920#include int main() { int a, b, k; scanf(..
AtCoder Beginner Contest 119 A - Still TBD \(\text{년도}\times 800 + \text{월}\times 40 + \text{일}\)로 계산하면 그나마 구현이 편하다.123456789101112#include int main() { int a, b, c; scanf("%d/%d/%d", &a, &b, &c); a = a * 40 * 20 + b * 40 + c; printf("%s", a > n; long long tot1 = 0; double tot2 = 0; while (n--) { string x, u; cin >> x >> u; if (u == "JPY") tot1 += stoll(x); else tot2 += stod(x); } printf("%.10lf..
AtCoder Beginner Contest 118 A - B +/- A 문제 설명대로 \(A\)가 \(B\)의 약수면 \(A+B\)를, 아니라면 \(B-A\)를 출력하면 된다. 123456789101112131415#include int main() { int a, b; scanf("%d %d", &a, &b); if (b % a == 0) printf("%d", a + b); else printf("%d", b - a); return 0;} cs B - Foods Loved by Everyone이것도 문제 설명대로 각 음식이 몇 번 나왔는지 센 다음에, 모두에게 선택받은 음식의 수를 세면 된다. 1234567891011121314151617181920212223242526272829#include i..