Bear and Finding Criminals题解

本文最后更新于:8 个月前

题目

Bear and Finding Criminals

描述

熊岛有n个城市,编号为1到n。城市被排列成一长排。城市i和j之间的距离等于|i-j|。

利马克是一名警察。他住在一个城市a,他的工作是抓捕罪犯。这很难,因为他不知道犯罪分子在哪个城市。不过,他知道每个城市最多只有一个罪犯。

利马克将使用BCD(熊犯罪探测器)。BCD会告诉Limak,从一个城市a开始,每隔一段距离就有多少个罪犯。

你知道在哪些城市有罪犯。在利马克使用BCD后,计算他能抓到的罪犯的数量。

输入

输入的第一行包含两个整数n和a(1≤a≤n≤100)–城市的数量和Limak居住的城市的索引。
第二行包含n个整数t1,t2,…,tn(0≤ti≤1)。在第i个城市有ti个罪犯。

输出

打印Limak将抓到的罪犯的数量。

样例

输入1

6 3
1 1 1 0 1 0

输出1

3

输入2

5 2
0 0 0 1 0

输出2

1

提示

在第一个样本中,有六个城市,利马克住在第三个城市(下面的蓝色箭头)。罪犯在标有红色的城市里。
使用BCD给Limak提供了以下信息。

1.在离第三个城市的距离0处有一个罪犯–利马克确信这个罪犯正好在第三个城市。
2.在离第三城市的距离1处有一个罪犯–利马克不知道这个罪犯是在第二还是第四城市。
3.在离第三座城市的距离为2的地方有两个罪犯–利马克肯定有一个罪犯在第一座城市,一个在第五座城市。
4.每一个更大的距离都有零个罪犯。
因此,利马克将在第1、3和5个城市抓到罪犯,即总共有3个罪犯。 在第二个例子中(如下图),BCD给Limak的信息是,在距离Limak的城市2处有一个罪犯。在距离2的地方只有一个城市,所以Limak确定了一个罪犯的位置。

补充

时间限制 2 秒
内存限制 256 MB
来源 FYOJ

题解

emmmm……
模拟好,模拟秒,模拟青蛙呱呱叫

咳咳咳,还好,模拟,按题目打即可

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
using namespace std;
int s[110];
int n,a;
int sum = 0;
int main() {
cin >> n >> a;
for (int i = 1; i <= n; i++){
cin >> s[i];
}
if (a <= n/2) {
for (int i = 1;i <= n; i++) {
if (i < a) {
if (s[i] == 1 && s[2*a-i] == 1){
sum += 2;
}
}
else if (i == a) {
if (s[i] == 1){
sum++;
}
} else {
if (i >= 2*a){
if(s[i] == 1){
sum++;
}
}
}
}
} else {
for (int i = 1; i <= n; i++) {
if (i >= 2*a-n && i < a) {
if (s[i] == 1&&s[2*a-i] == 1){
sum+=2;
}
} else if (i == a) {
if (s[i] == 1){
sum++;
}
} else {
if (i < 2*a-n){
if(s[i] == 1){
sum++;
}
}
}
}
}
cout << sum << endl;
return 0;
}

测评结果 通过
分数 100
时间 1 MS
内存 712 KB
语言 C++
代码长度 797


Bear and Finding Criminals题解
https://seth-blog.ml/posts/2949852796/
作者
Seth
发布于
2022年5月11日
更新于
2022年5月11日
许可协议