A. Johnny and Ancient Computer

문제

예시

[input]
10
10 5
11 44
17 21
1 1
96 3
2 128
1001 1100611139403776
1000000000000000000 1000000000000000000
7 1
10 8

[output]
1
1
-1
0
2
2
14
0
-1
-1

답1 – 이곳을 클릭하면 정답이 보입니다
from sys import stdin

def answer(a, b):
  a, b = sorted([a, b], reverse=True)
  if a == b: return 0
  if a%b != 0: return -1
  c = a//b
  twoCount = 0
  while(c != 1):
    if c%2 != 0: return -1
    c = c//2
    twoCount += 1
  count = 0
  if twoCount >= 3:
    count += twoCount//3
    twoCount = twoCount%3
  if twoCount >= 2:
    count += twoCount//2
    twoCount = twoCount%2
  count += twoCount
  return count

  
testCount = int(input())
for _ in range(testCount):
  a, b = map(int, stdin.readline().split())
  print(answer(a, b))
답2 – 이곳을 클릭하면 정답이 보입니다

설명

B. Johnny and His Hobbies

문제

예시

[input]
6
4
1 0 2 3
6
10 7 14 8 3 12
2
0 2
3
1 2 3
6
1 4 6 10 11 12
2
0 1023

[output]
1
4
2
-1
-1
1023

답1 – 여기를 클릭하면 정답이 보입니다
from sys import stdin
from collections import Counter

def xor(a, b):
  return a^b

def answer(arr):
  dic = Counter(arr)
  ks = []
  for i in range(len(arr)-1):
    k = xor(arr[0], arr[i+1])
    allPass = True
    for j in range(len(arr)):
      x = xor(k, arr[j])
      if dic.get(x) is None:
        allPass = False
        break
    if allPass is True:
      ks.append(k)
  if len(ks) == 0: return -1
  return min(ks)
  
  
testCount = int(input())
for _ in range(testCount):
  n = int(input())
  arr = list(map(int, stdin.readline().split()))
  print(answer(arr))
답2 – 여기를 클릭하면 정답이 보입니다

설명

C. Johnny and Another Rating Drop

문제

예시

[input]
5
5
7
11
1
2000000000000

[output]
8
11
19
1
3999999999987

답1 – 여기를 클릭하면 정답이 보입니다
def an(n):
  if n == 0: return 0 # A1일 때는 _len이 1이니까 결국 1이 된다.
  a = 1 + 3*(n-1)
  a += 2**(n+1)-4 + -4*(n-1) # 등비수열의 합 공식 이용
  return a

def answer(n):
  unfairness = 0
  binary = str(bin(n))[2:]
  binary_list = list(reversed([int(i) for i in binary]))
  for i in range(len(binary_list)):
    if binary_list[i] == 1:
      _len = (i+1)
      unfairness += (an(i) + _len)
  return unfairness
  
  
testCount = int(input())
for _ in range(testCount):
  n = int(input())
  print(answer(n))
답2 – 여기를 클릭하면 정답이 보입니다

설명

D. Johnny and Contribution

D. Johnny and Contribution

문제

예시

[input]
3 3
1 2
2 3
3 1
2 1 3

[output]
2 1 3


[input]
3 3
1 2
2 3
3 1
1 1 1

[output]
-1


[input]
5 3
1 2
2 3
4 5
2 1 2 2 1

[output]
2 5 1 3 4

답1 – 여기를 클릭하면 정답이 보입니다
from sys import stdin

def answer(m, dic, arr, topics):
  for i in range(len(topics)):
    topicNum, nodeNum = topics[i]
    if dic.get(nodeNum) is not None:
      if connectdNode in dic.get(nodeNum):
        return -1
  return " ".join(str(topic[1]) for topic in topics)
  
n, m = map(int, input().split())
dic = {}
for _ in range(m):
  a, b = map(int, input().split())
  if dic.get(a) is None:
    dic[a] = [b]
  else:
    dic[a].append(b)
  if dic.get(b) is None:
    dic[b] = [a]
  else:
    dic[b].append(a)

arr = list(map(int, input().split()))
topics = sorted([(arr[i], (i+1)) for i in range(len(arr))], key=lambda item: item[0])
print(answer(m, dic, arr, topics))
답2 – 여기를 클릭하면 정답이 보입니다

설명