360笔试算法题 20240803

1、探险(双指针)

题目描述:

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

输入描述:

第一行包括一个正整数n,表示门的数量。

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

输出描述:

输出一行n个数s1,s2,…,sn,其中si表示第i道门在第si天被打开。

样例输入:

5

5 3 1 2 4

样例输出

3 4 4 5 5

for i in range(n):
    have[arr[i]] += 1
    while now <= n and have[now]:
        ans[now] = i + 1
        now += 1

2、骑行(动态规划)

题目描述:

某个公司的共享单车单词骑行1元,但可以购入VIP卡免去骑行费用,有以下几种VIP卡:

日卡a元,1天不收费;

月卡b元,30天不收费;

年卡c元,365天不收费;

十年卡d元,3650天不收费。

每天都允许购入任意张VIP卡,生效时间可累加。

小A在未来n天都需要骑共享单车,第i天需要骑行ri次,现在小A想知道,他最少以要花多少钱。

 

输入描述:

第一行一正整数n(1<=n<=10^5)

第二行四个正整数a,b,c,d(1<=a,b,c,d<=10^7),表示四种卡的价格。

第三行n个正整数ri(1<=ri<=10^9),表示每天骑行次数

 

输出描述:

输出一个整数x,表示最小花费。

 

样例输入:

10

2 40 400 3000

1 4 2 4 2 2 1 1 100 1

样例输出:

16

dp[i] = dp[i-1] + prices (不买卡)
dp[i] = min(dp[i], dp[i-1] + a) (买日卡)
dp[i] = min(dp[i], dp[max(0, i-30)] + b) (买月卡)
dp[i] = min(dp[i], dp[max(0, i-365)] + c) (买年卡)
dp[i] = min(dp[i], dp[max(0, i-3650)] + d) (买十年卡)

#360秋招##笔试##Python#
全部评论
360真比科大讯飞简单多了
点赞 回复 分享
发布于 08-03 22:01 上海

相关推荐

2 5 评论
分享
牛客网
牛客企业服务