三六零笔试-探险

故事背景

小X在一片大陆上探险,有一天他发现了一个洞穴,洞穴里面有n道门,打开每道门都需要对应的钥匙,编号为i的钥匙能用于打开第i道门,而且只有在打开了第i (i≥1)道门之后,才能打开第i+1道门,一开始只能打开第1道门。幸运的是,小X在外面探索的途中,每天都能发现一把能打开这n道门中其中一道门的钥匙,每天找完钥匙后他都会去打开所有能打开的门。现在给出他每天找到的钥匙编号,请问每道门分别在哪一天被打开。

输入

第一行包含一个正整数n ,表示门的数量。
接下来一行包含 n n n 个正整数 a 1 a_1 a1 a 2 a_2 a2,…, a n a_n an,其中 a i a_i ai 表示第 i i i 天他找到的钥匙的编号,能够打开第 a i a_i ai 道门,数据保证 a 1 − a n a_1-a_n a1an 1 − n 1-n 1n 的一个排列。

输出

输出一行 n n n 个数 s 1 s_1 s1 s 2 s_2 s2 ,…, s n s_n sn ,其中 s i s_i si 表示第i道门在第 s i s_i si 天被打开。

算法思路

按照题意模拟即可:先在数组内记下已经获得过钥匙的门,利用指针p记录目前所在的位置,每天不断开门(每开一个门,输出一个数)直到不能开为止。
注意天数和门序号均是从1开始,而不是0开始。

Python代码

n = int(input())
nums = [int(x) for x in input().split()]
doors = [0] * n
p = 0
ans = [-1] * n
for i in range(n):
    doors[nums[i] - 1] = 1
    while p < n and doors[p] == 1:
        ans[p] = i + 1
        p += 1
print(str(ans)[1:-1].replace(',',''))

猜你喜欢

转载自blog.csdn.net/m0_38068876/article/details/129814988
今日推荐