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

站队(京东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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值