题目描述
小明是个鹅卵石收藏者,从小到大他一共收藏了 nn 块鹅卵石,编号分别为 1∼n1∼n,价值分别为 a1,a2,⋯ ,ana1,a2,⋯,an。
这天他乘船准备去往蓝桥王国,然而天有不测风云,小明所在的海域下起了暴雨。
很快小明船上的积水越来越多,为了防止沉船,小明不得不选择若干块他收藏的鹅卵石丢弃。
小明制定了一套名为m计划的选择方案,其内容如下:
对于任意区间 [i,i+m−1][i,i+m−1]丢弃价值最小的鹅卵石i∈[1,n−m+1]i∈[1,n−m+1]。
对于一块鹅卵石,它在 mm 计划中是可以被丢弃多次的。
请你输出将被小明丢弃的鹅卵石的价值。
输入描述
输入第 11 行包含两个正整数 n,mn,m。
接下来一行包含 nn 个正整 a1,a2,⋯ ,ana1,a2,⋯,an,表示鹅卵石的价值。
1≤m≤n≤5×1051≤m≤n≤5×105,0≤ai≤1090≤ai≤109。
输出描述
输出共 n−m+1n−m+1 行,每行输出一个整数,第 ii 行输出整数的含义为 ai,ai+1,⋯ ,ai+m−1ai,ai+1,⋯,ai+m−1 的最小值。
输入输出样例
![](https://img-blog.csdnimg.cn/img_convert/643b03869565c9d6491e1163ddc7b341.png)
![](https://img-blog.csdnimg.cn/img_convert/0d021b17fdbb0fd370ce3b4cdd35163e.png)
代码显示
import os
import sys
# 请在此输入您的代码
#m计划 ,最小堆,
#heapq有两种方式创建堆,
#一种是使用一个空列表,然后使用heapq.heappush()函数把值加入堆中,
#另外一种就是使用heap.heapify(list)转换列表成为堆结构
import heapq
n,m = map(int,input().split())
alist = list(map(int,input().split()))
q = [(alist[i],i) for i in range(m)]
heapq.heapify(q)
print(q[0][0])
for i in range(m,n):
heapq.heappush(q,(alist[i],i))
while q[0][1]<=i-m:
heapq.heappop(q)
print(q[0][0])
题目描述
蓝桥幼儿园的学生是如此的天真无邪,以至于对他们来说,朋友的朋友就是自己的朋友。
小明是蓝桥幼儿园的老师,这天他决定为学生们举办一个交友活动,活动规则如下:
小明会用红绳连接两名学生,被连中的两个学生将成为朋友。
小明想让所有学生都互相成为朋友,但是蓝桥幼儿园的学生实在太多了,他无法用肉眼判断某两个学生是否为朋友。于是他起来了作为编程大师的你,请你帮忙写程序判断某两个学生是否为朋友(默认自己和自己也是朋友)。
输入描述
第 11 行包含两个正整数 N,MN,M,其中 NN 表示蓝桥幼儿园的学生数量,学生的编号分别为 1∼N1∼N。
之后的第 2∼M+12∼M+1 行每行输入三个整数,op,x,yop,x,y:
如果 op=1op=1,表示小明用红绳连接了学生 xx 和学生 yy 。
如果 op=2op=2,请你回答小明学生 xx 和 学生 yy 是否为朋友。
1≤N,M≤2×1051≤N,M≤2×105,1≤x,y≤N1≤x,y≤N。
输出描述
对于每个 op=2op=2 的输入,如果 xx 和 yy 是朋友,则输出一行 YES,否则输出一行 NO。
输入输出样例
![](https://img-blog.csdnimg.cn/img_convert/4c04fd1a05986ef3e8217479df9200d0.png)
![](https://img-blog.csdnimg.cn/img_convert/dc3fcb26d11d819ee25afb6b90d00026.png)
import os
import sys
# 请在此输入您的代码
N,M=map(int,input().split())
s=[]
for _ in range(M):
op,x,y=map(int,input().split())
if op==1:
s.append(x)
s.append(y)
elif op==2:
if len(s)!=0:
print('YES')
else:
print('NO')
题目描述
给定一个长度为 NN 数组 aa 和一个长度为 MM 的数组 bb。
请你求出它们的最长公共子序列长度为多少。
输入描述
输入第一行包含两个整数 N,MN,M,分别表示数组 aa 和 bb 的长度。
第二行包含 NN 个整数 a1,a2,...,ana1,a2,...,an。
第三行包含 MM 个整数 b1,b2,...,bnb1,b2,...,bn。
1≤N,M≤1031≤N,M≤103,1≤ai,bi≤1091≤ai,bi≤109。
输出描述
输出一行整数表示答案。
输入输出样例
![](https://img-blog.csdnimg.cn/img_convert/3082d72017ff3b204654748d2f6506e3.png)
![](https://img-blog.csdnimg.cn/img_convert/37ab2356d12db2771e118f7c97f0f36b.png)
代码显示
#最长公共子序列
n,m=map(int,input().split())
a = list(map(int,input().split()))
b = list(map(int,input().split()))
dp = [[0]*(n+1) for _ in range(m+1)]
for i in range(1,m+1):
for j in range(1,n+1):
if a[j-1]==b[i-1]:
dp[i][j]=dp[i-1][j-1]+1
else:
dp[i][j]=max(dp[i-1][j],dp[i][j-1])
print(dp[-1][-1])