2017京东春招C/C++编程题(1)——站队
2017-04-07 21:44
253 查看
/*题目描述: 有一条很长的队伍,队伍里面一共有n个人。所有的人分为三类:警察,小偷和普通人。 将队伍里面的人从前到后由1到n编号,编号为i的人与编号为j的人的距离为i与j之差的绝对值。 每一个警察有一个能力值x,表示他能够监视与他距离不超过x的所有人, 小偷被警察发现当且仅当他被一个或多个警察监视到。你知道在整条队伍中,一共有多少个小偷会被警察发现吗? 输入: 输入有两行,第一行一个数n(1<=n<=100000),接下来一行有一个长度为n的字符串,依次表示队伍中的每一个人。如果某一位是1-9的某个数字x, 表示这一位是一个能力值为x的警察;如果某一位是字符X表示这一位是小偷;如果某一位是字符#表示这是一个普通人。输入保证不会出现其它字符。 输出: 输出一个数,整条队伍中被警察发现的小偷总数。 样例输入: 9 X1X#2X#XX 样例输出: 3 Hint: 在第一组样例中,一共有9个人,第2位是一个能力值为1的警察,他可以发现位置1,3的两个小偷, 第5位是一个能力值为2的警察,他可以发现位置3,6的两个小偷。所以本题中,位置为1,3,6的三个小偷被警察发现了,总个数为3。*/ #include<stdio.h> #define MAXSIZE 100000 int main(){ int n, i, pol[MAXSIZE],theif, temp,thf[MAXSIZE]; char line[MAXSIZE]; scanf("%d",&n); getchar(); for(i=1; i<=n; i++){ scanf("%c", &line[i]); } theif=0; for(i=1; i<=n; i++){ if(line[i]=='X'){ thf[i]=1;//i代表位置 } } for(i=1; i<=n; i++){ if(line[i]>='1' && line[i]<='9'){ pol[i]=line[i]-'0'; //i代表位置 for(temp=i+1; temp<=i+pol[i]; temp++){ if(line[temp] == 'X' && thf[temp] != 0){ theif++; thf[temp] = 0; } } for(temp=i-1; temp>=i-pol[i]; temp--){ if(line[temp] == 'X' && thf[temp] != 0){ theif++; thf[temp] = 0; } } } } printf("%d", theif); return 0; }
相关文章推荐
- 采购单-京东2017在线笔试编程题C++
- 2017京东实习生招聘编程题——站队抓小偷(python)
- 2017京东在线笔试编程题之 买东西
- 京东2017校招笔试编程题2:进制转换、辗转相除法
- 京东2017实习生招聘在线笔试编程题
- 【编程】【2017京东java实习生编程题】异或
- 【编程】【2017京东java实习生编程题】拍卖
- 京东2017 C++一面
- 京东2017实习生招聘——在线笔试编程题总结
- 京东2017实习生招聘在线笔试编程题题解
- 完美世界2017秋招真题 【编程题】孪生质数(C++)
- 2017京东实习生招聘编程题——买糖果(python)
- 2017京东爬上编程题
- 2017京东笔试编程题-保卫方案 | Codeforces Beta Round #5 E.Bindian Signalizing
- 终结者编程题(京东2017实习生真题)
- 2017网易内推c++工程师笔试——编程题
- 京东校招笔试(C++方向)编程题
- 京东2017校园招聘编程题--幸运数
- 2017 京东校招编程题 进制转换
- 京东2017校招笔试编程题iOS开发工程师