赢的次数
Alice 和 Bob在玩游戏。一共玩了 n局。二者的胜利的概率都是1/2。求 Alice 赢几次的可能性最大。输出最有可能赢几次,如果有多个结果,从小到大输出。一行若干个数,每个数之间一个空格,表示有可能赢的次数。
输入
2
输出
1
用11表示赢,用00表示输的话,共有
0000
0101
1010
1111
这四种情况,显然赢11次的概率最大
"""
赢k次的概率是Cnk/2^n,而这一组合数在n/2时取得最值,所以只要判断n为奇数还是偶数即可,有两种方法判断n是奇数还是偶数
第一种判断输入的数a&1是否为真,为真说明是奇数,输出中位数和中位数➕ 1,否则为偶数,输出n的中位数
第二种,是直接除二判断n是奇数还是偶数,然后执行对应的输出语句,"""
n = int(input())
if n % 2 == 0:
print(n//2,n//2+1)
else:
print(n//2)
字段和
给定一个序列,问你有没有可能重新排列这个序列使得所有长度小于等于 2 的子区间和不等于 0。一行一个字符串。"YES"表示可能重新排列这个序列使得所有长度小于等于 22 的子区间和不等于 00,反之则输出“NO”。输出不含引号。
输入:
6
34 1345 -3542 -1423 4213 1
输出:
YES输入:
4
1 1 -1 1 (无论怎样排列,-1−1 总和至少 11 个 11 相邻,所以总存在一个和为 00 的长度为 22 的子段。)
输出:
NO
输入:
5
1 5 -1 -5 0 (0 的存在使得总有一个长度为 11 的子段和为 0)
输出:
NO
n = int(input())
l = list(map(int, input().split()))
if 0 in l: # 如果输入的数(即长度为1的序列)中 包括0,就直接返回NO
print('NO')
else:
l = list(set(l)) # 通过set对序列进行去重,但是去重后返回一个集合,所以需要通过list进行强转
if len(l) == 2 and l[0] + l[1] ==0: # 如果列表长度为2,并且两个数字相加和为0,就返回NO
print('NO')
else:
print('YES') # 如果长度为1的序列中没有0元素,且长度为2时去重后的元素相加不为0,就返回YES