题目:
疫情逐步缓和后,电影院终于开业了,但是由于当前仍处于疫情期间,应尽量保持人群不聚集的原则。
所以当小易来电影院选定一排后,尽量需要选择一个远离人群的位置。
已知由0和1组成的数组表示当前排的座位情况,其中1表示已被选座,0表示空座
请问小易所选座位和最近人的距离座位数最大是多少?
有如下假设:至少有一个人已选座,至少有一个空座位,且座位数限制为
输入描述:
一行由0和1组成的整数数组
输出描述:
仅一行一个整数表示答案
输入例子1:
1 0 0 0 1 0 1
输出例子1:
2
例子说明1:
小易第3个座位最合适,则和座位1/座位5的距离为2
输入例子2:
1 0 1 0 1
输出例子2:
1
例子说明2:
小易可以选择第2个座位或者第4个座位,距离为1
说明:
简单模拟题目,枚举每个空位,对于首尾空位特殊处理。对于中间空位,分别从左右进行扫描,找距离他的空位有多少个,左右空位距离的最小值即是最优。对于首,只需要找右边,对于尾,只需要找左边。
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
int a[1005]={
0},t=0;
getline(cin,s);
for(int i=0;i<s.length();i++){
if(s[i]=='1'){
a[t++]=1;
}else if(s[i]=='0'){
a[t++]=0;
}
}
int kmax=0;
for(int i=0;i<t;i++){
if(a[i]==0&&i==0){
int m=i,r=0;
while(m<t&&a[m]==0){
m++;
r++;
}
if(kmax<r){
kmax=r;
}
}else if(a[i]==0&&i==t-1){
int m=i,l=0;
while(m>=0&&a[m]==0){
m--;
l++;
}
if(kmax<l){
kmax=l;
}
}else if(a[i]==0){
int m=i,l=0,r=0;
while(m>=0&&a[m]==0){
m--;
l++;
}
m=i;
while(m<t&&a[m]==0){
m++;
r++;
}
int temp=min(l,r);
if(kmax<temp){
kmax=temp;
}
}
}
cout<<kmax<<endl;
return 0;
}