[코드포스/개별문제] CF#623 C번 Restoring Permutation
코드포스 #623 C번 - Restoring Permutation 1부터 2n까지의 정수를 각각 하나씩 가지고 있는 정수 배열 a가 있다. 배열 b는 b[i] = min(a[2i - 1], a[2i])로 정의된다. 배열 b가 주어졌을 때, 배열 a를 출력하시오. 1, 2, ..., 2n의 정수가 각각 사용 되었는지 확인하고, 입력받은 배열 b의 원소에 대해서, 가장 가까운 큰 수(b + 1, b + 2, ...)를 확인한다. 만약 현재 값보다 큰 값이 없으면 b[i]를 정의할 수 없기 때문에 불가능한 경우이고, 만약 가능하다면 해당 값을 체크처리하고 출력한다. 아래는 제출코드이다. #include // 2의 제곱수 판정 #define POW2(X) (X) == ((X)&(-(X))) // 기본설정 typ..
[코드포스/Contest] Codeforces Round #640 (Div. 4)
#640 후기 처음 참여한 Div4 코드포스여서 난이도나 이런것들에 대해서 궁금하기도 하고, 많이풀수있을까 기대되기도 했던 코드포스였다. 대회때는 D번까지 풀었고, 이후 생각나서 E번부터 G번까지 마저 풀었는데, 다시 풀어보면서 느낀점은, Div4의 E번부터 G번문제도 생각보다 풀만한 문제구나 느꼈다. #640 문제 A번 Sum of Round Numbers - 성공 더보기 양수 x가 d000...0 형식인 경우 해당 수는 둥글다(Round)라고 한다. 양수 n을 둥근 수의 합으로 나타냈을 때, 둥근 수의 개수와 둥근 수를 출력하시오. 문제에서 둥근 수의 예를 들어줬는데, 1000, 100, 10, 1과 같이 맨 앞자리수가 1 ~ 9인 자연수이고, 그 뒤에 0이 0개부터 n개 있는 수가 둥근 수이다. 즉..
[코드포스/Contest] Codeforces Round #647 (Div. 2)
#647 후기 평소에 잘 쓰지 않는 XOR 연산이나 2진수 연산이 나와서 부족함을 많이 느낄 수 있는 대회였다. 이런 부분을 보완해야겠다고 생각이 들었다. #647 문제 A번 Johnny and Ancient Computer - 성공 더보기 정수 a, b가 주어진다. 해야 할 일은 a를 b로 바꾸는데 다음과 같은 작업을 시도할 수 있다. a에 {2, 4, 8, 1/2, 1/4, 1/8} 중 하나를 곱한다. a를 b와 같게 만들기 위한 최소 횟수를 출력하여라. 곱할 수 있는 수는 모두 2의 제곱수이다. 즉 a * (2^n) = b인 n값을 찾는게 문제의 폭표이다. 계산의 편의성을 위하여, b가 a보다 크다고 가정하면, 2^n = b / a 인 n을 찾아야 하고, n이 정수여야하므로 b / a가 정수이고, ..