网易18实习算法题

1.小Q正在给一条长度为n的道路设计路灯安置方案。

为了让问题更简单,小Q把道路视为n个方格,需要照亮的地方用’.’表示, 不需要照亮的障碍物格子用’X’表示。

小Q现在要在道路上设置一些路灯, 对于安置在pos位置的路灯, 这盏路灯可以照亮pos - 1, pos, pos + 1这三个位置。

小Q希望能安置尽量少的路灯照亮所有’.’区域, 希望你能帮他计算一下最少需要多少盏路灯。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 # 算法思路
# x的位置也是可以放置路灯的 其实是贪心
#遍历路灯字符串,遇见“.”,就给计数器+1,然后往后挪 三个位置。如果遇到“X”,就直接往后挪一个位置。

#编程思路
#路灯个数放入数组n中,路灯对应的字符串放入数组#lantern中,要放路灯的个数放入lantern_count中。这三#个数组是一一对应的。双重循环来遍历lantern中的字符#串,如果遇到“.”,对应的lantern_count+=1,j+=3(挪三#个位置)。如果遇到“X”,j+=1(挪一个位置)。
if __name__ =='__main__':
count = int(input()) # 测试用例个数
n = []
lantern = []
for i in range(count):
n_tmp = int(input()) # 路灯个数
n.append(n_tmp)
lantern_tmp = input() # 路灯分布字符串
lantern.append(lantern_tmp) # ['.x.', '...xxx...xx']
lantern_count = [0 for i in range(count)] # [0, 0]
for i in range(len(lantern)):
j = 0
while (j < len(lantern[i])):
if lantern[i][j] == '.':
j += 3
lantern_count[i] +=1
else:
j += 1
print(lantern_count[0])
for i in range(len(lantern_count)-1):
print(lantern_count[i+1])

  1. 牛牛去犇犇老师家补课,出门的时候面向北方,但是现在他迷路了。虽然他手里有一张地图,但是他需要知道自己面向哪个方向,请你帮帮他。
    输入描述:
    每个输入包含一个测试用例。
    每个测试用例的第一行包含一个正整数,表示转方向的次数N(N<=1000)。
    接下来的一行包含一个长度为N的字符串,由L和R组成,L表示向左转,R表示向右转。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     # 比如输入3  LRL 输出W
    n = input()
    m = input()
    dict1 = {'1':'E','2':'S','3':'W','0':'N'}
    init = 0
    for i in range(int(n)):
    if m[i]=='L':
    init-=1
    else:
    init+=1
    print(dict1[str(init%4)]) # -1%4是3
  2. 牛牛总是睡过头,所以他定了很多闹钟,只有在闹钟响的时候他才会醒过来并且决定起不起床。从他起床算起他需要X分钟到达教室,上课时间为当天的A时B分,请问他最晚可以什么时间起床
    输入描述:
    每个输入包含一个测试用例。
    每个测试用例的第一行包含一个正整数,表示闹钟的数量N(N<=100)。
    接下来的N行每行包含两个整数,表示这个闹钟响起的时间为Hi(0<=A<24)时Mi(0<=B<60)分。
    接下来的一行包含一个整数,表示从起床算起他需要X(0<=X<=100)分钟到达教室。
    接下来的一行包含两个整数,表示上课时间为A(0<=A<24)时B(0<=B<60)分。
    数据保证至少有一个闹钟可以让牛牛及时到达教室。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 3
# 5 0
# 6 0
# 7 0
# 59
# 6 59
import sys
if __name__ =='__main__':
n = int(sys.stdin.readline().strip())
values= []
for i in range(n):
line = sys.stdin.readline().strip().split(' ')
values.append(line) # [['5', '0'], ['6', '0'], ['7', '0']]
dst_time = int(sys.stdin.readline().strip())
class_time = sys.stdin.readline().strip().split(' ')
b = list(map(lambda x :int(x[0])*60+int(x[1]), values))
deadline = int(class_time[0]) * 60 + int(class_time[1]) - dst_time
c = [n for n in b if n <= deadline ]
print((str(max(c)//60)) + ' ' + str(max(c)%60)) # 输出6 0
-------------本文结束感谢您的阅读-------------