Codeforces 680B. B. Bear and Finding Criminals
原题链接
简单
作者:
蓬蒿人
,
2022-03-26 23:15:54
,
所有人可见
,
阅读 231
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
// 680B
// 题目大意
// 给定一个 n s表示城市个数与初始位置
// 随后是n个数 表示城市i的罪犯数量 数量最多为1
// 现有探测器 可以探测到距s有i个距离的城市的罪犯数量
// 问最多可以抓几个罪犯
/*----------------------解题思路------------------*/
// 对于有罪犯的城市i 其关于s的对称城市下标为ohter=s-(i-s)
// 若other<1或other>n则城市i的罪犯可以抓到
// 若1<=other<=n&&a[i]=a[other]=1则城市i与other的都可以抓到
// 只不过other的罪犯遍历到了再记入
typedef long long ll;
const int N = 1e5+10;
int n,s;
int a[N];
int main(){
scanf("%d%d", &n,&s);
for (int i=1;i<=n;i++){
scanf("%d", &a[i]);
}
int ans=0;
for (int i=1;i<=n;i++){
if (a[i]){
int other=s-(i-s);
if (other<1||other>n||a[i]==a[other]) ans++;
}
}
printf ("%d\n",ans);
return 0;
}
/*
int main(){
scanf("%d%d", &n,&s);
for (int i=1;i<=n;i++){
scanf("%d", &a[i]);
}
int ans=0;
for (int i=s*2;i<=n;i++) ans+=a[i];
//cout<<ans<<'\n';
if (a[s]) ans++;
for (int i=1;i<s;i++){
if (s-i>=1&&s+i<=n){
if (a[s-i]&&a[s+i]) ans+=2;
}
else if (s-i>=1&&s+i>n){
if (a[s-i]) ans++;
}
else if (s-i<1&&s+i<=n){
if (a[s+i]) ans++;
}
}
return 0;
}*/