洛谷 P3156 【深基15.例1】询问学号【Python】

题目链接
浅浅地记录我自己的洛谷刷题情况


目录

一、问题重述

1.题目描述

2.输入格式

3.输出格式

4.输入输出样例

5.说明/提示

二、大概思路

三、完整AC代码


问题重述

题目描述

在这里插入图片描述

输入格式

在这里插入图片描述

输出格式

在这里插入图片描述

输入输出样例

#样例1
输入:
10 3
1 9 2 60 8 17 11 4 5 14
1 5 9
输出:
1
8
5

说明/提示


大概思路

这题不能老老实实的用列表去做,因为同学们并不是按学号的大小递增或递减进入教室的,每次调用Index都会让他慢慢的去查找,这样的效果是非常慢的,那么这时候就应该想到了字符串的find()函数了,我们知道find()的语法格式是这样的:

字符串.find(查找的子串,查找开始位置的下标, 查找结束位置的下标)
我们就可以利用它可以从指定位置开始查找这一特性来做我们这道题,使得我们只需要遍历一次字符串就能找到我们要询问的同学的下标,我们只需要对输入进行一个简单的处理即可。
此外,当我们找到我们要询问的第i个同学后,我们怎么保存他的学号呢,这个时候当然想到了我们的字典了,具体代码见下


完整AC代码

n, m = input().split()
stu_id = " " + input()
inquire = list(map(int, input().split()))
lst = sorted(inquire)
diet = {}
z = 0
x = 0
for i in lst:
    while z < i:
        x = stu_id.find(" ", x) + 1
        z += 1
    y = stu_id.find(" ", x)
    diet[i] = stu_id[x:y]
for i in inquire:
    print(diet[i])
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值