您的位置:首页 > 编程语言 > Python开发

2017京东实习生招聘编程题——站队抓小偷(python)

2017-04-09 20:36 731 查看

站队(京东2017实习生真题)
题目描述
有一条很长的队伍,队伍里面一共有n个人。所有的人分为三类:警察,小偷和普通人。将队伍里面的人从前到后由1到n编号,编号为i的人与编号为j的人的距离为i与j之差的绝对值。每一个警察有一个能力值x,表示他能够监视与他距离不超过x的所有人,小偷被警察发现当且仅当他被一个或多个警察监视到。你知道在整条队伍中,一共有多少个小偷会被警察发现吗?

输入

输入有两行,第一行一个数n(1<=n<=100000),接下来一行有一个长度为n的字符串,依次表示队伍中的每一个人。如果某一位是1-9的某个数字x,表示这一位是一个能力值为x的警察;如果某一位是字符X表示这一位是小偷;如果某一位是字符#表示这是一个普通人。输入保证不会出现其它字符。

样例输入

9

X1X#2X#XX

输出

输出一个数,整条队伍中被警察发现的小偷总数。 

样例输出

3

# -*- coding: utf-8 -*-
n=raw_input()
n=int(n)
sque=raw_input()
person_type_dict={}
police_distance_dict={}
for i in range(1,n+1):
p=sque[i-1]
if p=='X':
person_type_dict[i]='steal'
elif p=='#':
person_type_dict[i]='ordinary'
else:
person_type_dict[i]='police'
police_distance_dict[i]=int(p)
goal=[]
for k in police_distance_dict.keys():
dis=police_distance_dict[k]
min_num=max(1,k-dis)
max_num=min(k+dis,n)
pra=[]
for j in range(min_num,k)+range(k+1,max_num+1):
if person_type_dict[j]=='steal':
pra.append(j)
goal=goal+pra
goal=set(goal)
print len(goal)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: