【网易2021校招笔试-移动端开发工程师(正式第二批)】- 电影院选座

题目:
疫情逐步缓和后,电影院终于开业了,但是由于当前仍处于疫情期间,应尽量保持人群不聚集的原则。
所以当小易来电影院选定一排后,尽量需要选择一个远离人群的位置。
已知由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;
}

猜你喜欢

转载自blog.csdn.net/tran_sient/article/details/112428210
今日推荐