A: 그냥 3번째부터 잘라서 정수로 변환하고 90이하인거 세주면 됩니다
B: 기본값이 0으로 초기화된 맵 (ex. map<string,int>나 defaultdict(int))을 씁시다. 키 "ChongChong"의 값은 1로 초기화해주고, 쿼리 Q번에 대해 A,B 중 1인 사람이 있다면 둘 다 1로 만들어 줍시다. 마지막으로 모든 키에 대해 값을 다 더해주면 답이 나옵니다.
C: 치킨 피자 햄버거를 살 수 있는 만큼 사고, 남은 티켓은 다음 걸로 (치킨->피자, 피자->햄버거, 햄버거->치킨) 넘깁시다. 한번 넘길 때 3씩 나뉘어지므로 로그 시복도가 나옵니다. 저는 계산하기 귀찮아서 이걸 그냥 100번 반복했습니다.
D: 케웍. 일단 곰곰이가 하나인 경우는 답이 0입니다. 한 변으로 몰 수 있는 경우 (한 줄로 배치된 경우)는 그 한 줄에서 끝에 있는 곰곰이를 반대쪽 변으로 모는데 드는 횟수 두가지 중 최소입니다. 나머지 경우는 무조건 구석으로 모는 경우가 최소입니다. 구석은 4개가 있고, 각 경우에 대해 max(가로이동)+max(세로이동)이 답입니다. 이렇게 구석 4개 중에 최소를 찾으면 됩니다.
E: Well known in physics. 그냥 "질량중심을 구하시오"라는 문제입니다. x*w의 합을 w의 합으로 나누면 됩니다.
F: 친구가 이동할 수 있는 단위 거리(?)를 구해줍시다. 이는 친구가 이동할 수 있는 모든 거리의 GCD가 됩니다. x거리와 y거리가 모두 이 단위 거리로 나눠떨어지면 Ta-da, 아니면 Gave up입니다.
H: 올해 KOI 1차 문제와 상당히 유사한 테크닉입니다. 일단 그리디하게 앞에 있는 1부터 일대일로 매칭을 해줍시다. 이제 매칭된 쌍 각각을 중간으로 몰아야 하는데, S의 이동 수와 T의 이동 수의 밸런스가 맞게 해야 합니다. 거리가 짝수일 때는 그냥 중심으로 몰면 되고, S,T 이동 수에 dist/2를 각각 더해주면 됩니다. 거리가 홀수일 때가 문제인데, 밸런스가 맞는 쪽이 이득이므로 일단 (dist-1)/2를 둘 다 더해주고, S>=T이면 T에 dist%2를, S<T이면 S에 dist%2를 추가로 더해줍니다. S에 누적된 거리와 T에 누적된 거리 각각의 제곱을 더해 출력해주면 답입니다.
ㄳㄳ
C 치킨 -> 피자 -> 햄버거 -> 치킨 한번만 돌리면 안되길래 그냥 한번 더 돌렸더니 맞더라
단위거리가 머에요?
친구가 이동할 수 있는 거리 중에 가장 짧은 거리를 말하려고 했는데 정확한 표현을 모르겠네요. 예시로 친구가 3 2를 이동할 수 있는 경우 +3 -2 이동해서 1만큼 이동하는 것이 가능하고 따라서 단위거리는 1입니다
f 자세한설명될까요
친구가 이동할 수 있는 거리가 a1 a2 ... an이라고 합시다. 이때 a1 a2를 가지고 만들 수 있는 최소의 거리는 GCD(a1,a2)가 될 것입니다. (이동 과정을 유클리드호제법으로 치환해서 생각하시면 될 것 같습니다.) 이를 an까지 확장하면 GCD(GCD(...(GCD(a1,a2),a3,...),an) = GCD(a1,a2,a3,...,an)입니다. 이렇게 나온 최소의 거리로 x거리와 y거리가 모두 나누어떨어지면 친구는 0,0으로 이동할 수 있습니다.
감사합니다
아 D번 한 줄로 있을 때 한 쪽으로만 처리를 해줘서 틀렸네.. 풀이 ㄳㄳ
H 그냥 거리 차이의 합을 반띵하면 되긴함
난 C 넘기는거 딱 두번만 했어 3번 넘기면 결국 원점으로 돌아오거든, 수만 줄어든채로
f 전체의 gcd로 했어야 했구나