求解,我感觉逻辑没问题,但就是不过
118查看
社区服务 问题描述 为了庆祝妇女节,社区组织了一场“温暖传递”活动。社区中有 n n 个服务点排成一列,每个服务点可能有志愿者(用 1 表示)或暂时无人(用 0 表示)。
每个服务点都有居民需要帮助,现在你需要从左往右,为每个无志愿者服务点计算距离最近的有志愿者服务点的距离,若不存在则输出 − 1 −1。
输入格式 第一行输入一个整数 n n( 1 ≤ n ≤ 5000 1≤n≤5000),表示服务点数量。
第二行输入一个长度为 n n 的二进制字符串 S S,1 表示当前服务点有志愿者,0 表示当前服务点无志愿者。
数据保证 S S 至少包含 1 1 个 0。
输出格式 输出一行若干个整数,表示每个无志愿者服务点到有志愿者服务点的最近距离,若不存在则输出 − 1 −1。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
char A[5003];
int i=0;
for(;i<n;i++) cin >> A[i];
A[i]='0';
for(int i=0;i<n;i++){
int ans=0;
if(A[i]=='0'){
int lp=i;
int rp=i;
for(;lp>=0;lp--)
{
if(A[lp]=='1') break;
}
if(A[lp]=='0'&&lp==0) lp=50000;
for(;rp<=n-1;rp++)
{
if(A[rp]=='1') break;
}
if(A[rp]=='0'&&rp==n-1) rp=50000;
ans=min(i-lp,rp-i);
cout <<ans<<" ";
}
}
return 0;
}
copy
#学习讨论
| 关注
你的回复
请
登录
后回复