【孤独的数组】
分析
如果全部gcd都是1,就输出0 但凡有一个大于1,不论怎么乘都不会孤独,输出-1
ac code
import math
n = int(input())
A = list(map(int, input().split()))
flag = True
for i in range(1, n):
if math.gcd(A[i], A[i - 1]) >= 2:
flag = False
break
if flag:
print(0)
else:
print(-1)
【博弈大师】
分析
大家先一起抽,抽到不能抽再用卡牌 求出最后的一次 若是niumei抽,且它的b更多,就牛妹赢,否则niuniu赢 若是niuniu抽,且它的a更多,就牛牛赢,否则niuniu赢
ac code
import math
T = int(input())
for i in range(T):
n, a, b = map(int, input().split())
flag = 1
start = int(math.sqrt(2 * n))
while start * (start + 1) // 2 <= n:
start += 1
if start % 2 == 1:
flag = 1
else:
flag = -1
if flag == 1 and b > a:
print('niumei')
elif flag == 1 and a >= b:
print('niuniu')
elif flag == -1 and a > b:
print('niuniu')
elif flag == -1 and b >= a:
print('niumei')
关键:通过公式快速的找到start也就是最后抽的人是谁即可
【交替加乘】
分析
一半加一半乘 先排序 然后砍半 小的给加 大的给乘 然后让加从大开始 让乘从小开始 两边遍历即可
ac code
mod = 10 ** 9 + 7
n = int(input())
A = list(map(int, input().split()))
A.sort()
numsAdd, numsMultiple = None, None
numsAdd = A[: n // 2 + 1][::-1]
numsMultiple = A[n // 2 + 1:]
ans = numsAdd[0]
i = 1
j = 0
flag = 1
for k in range(n - 1):
if flag == 1:
ans += numsAdd[i]
ans %= mod
flag *= -1
i += 1
else:
ans *= numsMultiple[j]
ans %= mod
flag *= -1
j += 1
print(int(ans))
总结
注意1e9是float 10 ** 9才是int
以后写10 ** 9为秒!
|