#两种操作让数组全为0,面向结果编程,不要真写操作!!
# 两个不同的字符串长度相等,是否可以镜像翻转,最后输出l-r最小的
#一个字符串有大写字母和一些字符,判断如果删掉这些符号,剩下字符串是否恰好DGUT
#深度优先
#FFFFFFF
# while any(item!= 0 for item in a): #记住 any!!!
#两种操作让数组全为0,面向结果编程,不要真写操作!!
n = int(input())
numbers = input()
a = [int(number) for number in numbers.split()]
count = 0
# 计算每个元素除以2的次数
for num in a:
divides = 0
while num > 0:
num //= 2
divides += 1
count += divides
count+= n * (n - 1) // 2 #如果时间太长要把下面代码换成公式!!上面同理
# # 计算将每个元素移动到第一个位置所需的交换次数!!!!!
# for i in range(n):
# for j in range(i,0,-1): #从i到0 -1是倒着走
# a[j],a[j-1]=a[j-1],a[j]
# count+=1
print(count)
#EEEEEEE
# 两个不同的字符串长度相等,是否可以镜像翻转,最后输出l-r最小的
n=int(input())
s=input()
t=input()
arrs=[char for char in s]
arrt=[char for char in t]
result = None
min_diff = float('inf') #初始化为无穷大
for l in range(n):
for r in range(l+1,n+1):
s_list = list(s)
s_list[l:r] = s_list[l:r][::-1] #[1:r]从1-r-1的切片 [::-1]从末尾开始倒着来
new_s = ''.join(s_list)
# 比较逆转后的 s 和 t 是否相同
if new_s == t:
# 如果找到有效的 l 和 r,更新结果和最小差值
diff = r - l
if diff < min_diff:
min_diff = diff
result = (l + 1, r)
if result:
print(result[0], result[1])
else:
print('NO')
#BBBBB
#一个字符串有大写字母和一些字符,判断如果删掉这些符号,剩下字符串是否恰好DGUT
n=int(input())
str=input()
arr2=[]
for char in str: #循环字符串!!!
if char not in ['%', '&', '*', '?', '@', '^']:
arr2.append(char)
if arr2==['D','G','U','T']:
print('YES')
else:
print('NO')
v = [int(input()) for _ in range(10)] # 读取10个数字并存放在列表v中
def dfs():
current_sum = 0 # 当前和初始化为0
max_depth = 10 # 最大深度为10,因为有10个数字
path = [] # 路径初始化为空
def explore(current_index, current_sum):
# 如果已经检查了所有数字
if current_index == max_depth:
if current_sum == 20:
print("YES")
return True
return False
# 尝试使用个位数
if explore(current_index + 1, current_sum + v[current_index] % 10):
return True
# 尝试使用十位数
if explore(current_index + 1, current_sum + v[current_index] // 10):
return True
return False
# 从第一个数字开始,当前和为0,路径为空
if not explore(0, current_sum):
print("NO") # 如果遍历完所有组合都没有找到,则输出NO
dfs()