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

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


目录

一、问题重述

1.题目描述

2.输入格式

3.输出格式

4.输入输出样例

5.说明/提示

二、大概思路

三、完整AC代码


问题重述

题目描述

在这里插入图片描述

输入格式

洛谷 P3156 【深基15.例1】询问学号【Python】_第1张图片

输出格式

在这里插入图片描述

输入输出样例

#样例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])

你可能感兴趣的:(洛谷python题解,算法,数据结构)