1
小易在维护数据的时候遇到一个需求,具体来说小易有一系列数据,这些数据了构成一个长度为n的数字序列,接下来小易会在这个序列上进行q次操作。 每次操作有一个查询的数字x,小易需要将序列数据中所有大于等于x的数字都减一,并输出在本次操作中有多少个数字被减一了。 小易犯了难,希望你能帮帮他。
输入描述:
第一行n,q,表示数字个数和操作个数。 接下来一行n个数表示初始的数字。 接下来q行,每行一个数,表示指定的数字x。
输出描述:
对于每个询问,输出一个数字表示答案
输入例子1:
4 3
1 2 3 4
4
3
1
输出例子1:
1
2
4
题目来源:牛客网
n, q = map(int, input().split())
arr = list(map(int, input().split()))
for i in range(q):
x = int(input())
count = 0
for j in range(len(arr)) :
if arr[j] >= x:
arr[j]-=1
count+=1
print(count)
#arr = [each - 1 for each in arr if each>=x ]
2
小易学习了辗转相除法之后,就开始实践这个算法在求解最大公约数上。
牛牛给小易出了一道不同寻常的求解最大公约数: 求解a和b的最大公约数,但是a和b的范围特别大。
小易遇到了困难,向聪明的你寻求帮助,希望你能帮帮他。
输入描述:
第一行数字a,第二行数字b。
输出描述:
一行一个数字表示答案
输入例子1:
6
4
输出例子1:
2
输入例子2:
7951346523609888
6998915114363550
输出例子2:
1013754
小甲鱼是这样写的:
def gcd(a,b):
while b:
r = a%b
a = b
b = r
return a
if r != 0:
gcd(b,r)
if __name__ == '__main__':
a,b = map(int, input().split())
print(gcd(a,b))
3
小易有一个初始为空的数字集合,支持两种操作:
1、加入数字x到集合中。
2、询问集合中是否存在一个子集,满足子集中所有数字的Or值恰好为k。
Or为二进制按位或操作,C++中表示为"|"。
小易希望你能解决这个问题。输入描述:
第一行数字q,表示操作个数 接下来q行,每行两个数字:
1 x表示插入数字x
2 x表示询问数字x(即题设中询问的数值k) , 。输出描述:
对于每个询问,输出"YES"或者"NO"表示是否存在。输入例子1:
9
1 4
2 5
1 9
1 15
2 4
1 11
2 10
2 7
2 9输出例子1:
NO YES NO NO YES
没明白数字的or值怎么算
4
小易给定了一个长度为n的数字序列,对于每一个,小易希望能求解出所有长度为k的连续子序列的最大值中的最小值。
输入描述:
第一行数字n 接下来一行是一个长度为n的数字序列 ,
输出描述:
一行n个数字,第i个数字表示k = i时的答案。
输入例子1:
6 1 3 2 4 6 5
输出例子1:
1 3 3 4 6 6
例子说明1:
当k = 2的时候 子序列分别是:
1 3 最大值为 3
3 2 最大值为 3
2 4 最大值为 4
4 6 最大值为 6
6 5 最大值为6
所有最大值中的最小值为3
k=1时,输出全列最小值
k=n时,输出全列最大值
对于每个长度k=2:n,从位置0开始找,
复杂度太高,通过率只有30%
length = int(input())
num = list( map(int, input().split()))
print(min(num), end=' ')
for k in range(2,length):
maximum =[max(num[i:i+k]) for i in range(length-k+1)]
print(min(maximum[:]), end=' ')
print(max(num))
数字排序问题:
输入n,k,分别为数字个数,不能相邻数字对数
之后输入的k行 是不能相邻的数字对x,y按字典顺序输出所有符合要求的序列
输入例子: 3 2 1 2 2 1
输出例子: 1 3 2 2 3 1
完全没思路啊
一遇到排列组合问题就蒙圈