圣诞节要到了,圣诞老人准备了n(1 ≤ n ≤ 10^6)n(1≤n≤10 6 )份圣诞礼物,每份礼物都有专属的神秘兑换码a_ia i 且互不相同(1 ≤ a_i ≤ 10^9, 1 ≤ i ≤ n)(1≤a i ≤10 9 ,1≤i≤n),所有礼物按照兑换码从小到大的顺序排列a_1,a_2, a_3……a_na 1 ,a 2 ,a 3 ……a n ,编号从1到n。一共有m(1 ≤ m ≤ 10^5)m(1≤m≤10 5 )个小朋友在圣诞树前许愿,每位小朋友给出了一个兑换码b_j(1 ≤ b_j ≤ 10^9, 1 ≤ j ≤ m)b j (1≤b j ≤10 9 ,1≤j≤m),如果兑换码存在于序列中(存在a_i=b_j)(存在a i =b j ),圣诞老人会收到礼物对应的编号ans(1 ≤ ans ≤ n)ans(1≤ans≤n)并通过麋鹿雪橇投递给小朋友;如果兑换码不存在于序列中,则小朋友只能获得姜饼人,输出-1−1!简单的完整代码
时间: 2024-02-11 09:07:51 浏览: 25
完整代码如下:
```python
n = int(input())
a = list(map(int, input().split()))
m = int(input())
b = list(map(int, input().split()))
for i in range(m):
left, right = 0, n - 1
ans = -1
while left <= right:
mid = (left + right) // 2
if a[mid] == b[i]:
ans = mid + 1
break
elif a[mid] < b[i]:
left = mid + 1
else:
right = mid - 1
if ans != -1:
print(ans)
else:
print(-1)
```
其中,输入格式为:第一行一个整数n,表示礼物数量;第二行n个整数,表示礼物兑换码;第三行一个整数m,表示小朋友数量;第四行m个整数,表示小朋友的兑换码。最后按顺序输出每个小朋友能够兑换的礼物编号或-1。
相关问题
圣诞节要到了,圣诞老人准备了n(1 ≤ n ≤ 10^6)n(1≤n≤10 6 )份圣诞礼物,每份礼物都有专属的神秘兑换码a_ia i 且互不相同(1 ≤ a_i ≤ 10^9, 1 ≤ i ≤ n)(1≤a i ≤10 9 ,1≤i≤n),所有礼物按照兑换码从小到大的顺序排列a_1,a_2, a_3……a_na 1 ,a 2 ,a 3 ……a n ,编号从1到n。一共有m(1 ≤ m ≤ 10^5)m(1≤m≤10 5 )个小朋友在圣诞树前许愿,每位小朋友给出了一个兑换码b_j(1 ≤ b_j ≤ 10^9, 1 ≤ j ≤ m)b j (1≤b j ≤10 9 ,1≤j≤m),如果兑换码存在于序列中(存在a_i=b_j)(存在a i =b j ),圣诞老人会收到礼物对应的编号ans(1 ≤ ans ≤ n)ans(1≤ans≤n)并通过麋鹿雪橇投递给小朋友;如果兑换码不存在于序列中,则小朋友只能获得姜饼人,输出-1−1!简单做法
对于每个小朋友的兑换码,可以使用二分查找在礼物兑换码序列中查找是否存在对应的兑换码。如果存在,则输出对应礼物的编号,否则输出-1。具体实现可以使用二分查找算法,时间复杂度为O(mlogn)。代码实现如下:
```python
n = int(input())
a = list(map(int, input().split()))
m = int(input())
b = list(map(int, input().split()))
for i in range(m):
left, right = 0, n - 1
ans = -1
while left <= right:
mid = (left + right) // 2
if a[mid] == b[i]:
ans = mid + 1
break
elif a[mid] < b[i]:
left = mid + 1
else:
right = mid - 1
if ans != -1:
print(ans)
else:
print(-1)
```
其中,输入格式为:第一行一个整数n,表示礼物数量;第二行n个整数,表示礼物兑换码;第三行一个整数m,表示小朋友数量;第四行m个整数,表示小朋友的兑换码。最后按顺序输出每个小朋友能够兑换的礼物编号或-1。
圣诞老人Python
很高兴为您介绍如何用Python创建一个不断变大的圣诞老人。根据提供的引用内容,我将为您提供两种方法来实现这个效果。
方法一:使用Pygame库
```python
import pygame
# 初始化Pygame
pygame.init()
# 创建窗口
screen = pygame.display.set_mode((800, 600))
# 加载圣诞老人图片
santa_image = pygame.image.load("santa.png")
# 设置初始大小和位置
santa_rect = santa_image.get_rect()
santa_rect.center = (400, 300)
scale_factor = 1
# 游戏主循环
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 每帧增加圣诞老人的大小
scale_factor += 0.01
scaled_santa_image = pygame.transform.scale(santa_image, (int(santa_rect.width * scale_factor), int(santa_rect.height * scale_factor)))
# 更新圣诞老人的位置
santa_rect = scaled_santa_image.get_rect(center=santa_rect.center)
# 清屏
screen.fill((255, 255, 255))
# 绘制圣诞老人
screen.blit(scaled_santa_image, santa_rect)
# 更新屏幕
pygame.display.flip()
# 退出游戏
pygame.quit()
```
方法二:使用OpenCV库
```python
import cv2
# 加载圣诞老人图片
santa_image = cv2.imread("santa.png")
# 设置初始大小和位置
scale_factor = 1
# 创建窗口
cv2.namedWindow("Santa", cv2.WINDOW_NORMAL)
# 循环显示圣诞老人
while True:
# 每帧增加圣诞老人的大小
scale_factor += 0.01
scaled_santa_image = cv2.resize(santa_image, (int(santa_image.shape[1] * scale_factor), int(santa_image.shape[0] * scale_factor)))
# 显示圣诞老人
cv2.imshow("Santa", scaled_santa_image)
# 按下ESC键退出
if cv2.waitKey(1) == 27:
break
# 释放窗口
cv2.destroyAllWindows()
```
这两种方法都可以实现圣诞老人不断变大的效果。您可以根据自己的需求选择其中一种方法进行实现。