社交距离I

using namespace std;
const int N = 1e5 + 10;
int p[N];
int main()
{
    int n;
    string s;
    cin >> n >> s;
    int cnt = 0;
    for(int i = 0; i < s.size(); i ++)
    {
        if(s[i]=='1')
        {
            p[cnt ++] = i;
        }
    }
    //如果开始一头牛都没有,则直接输出答案
    if(!cnt)
    {
        printf("%d",n - 1);
        return 0;
    }
    //预处理牛和牛之间的最小距离
    int mi = INT_MAX;
    for(int i = 0; i < cnt - 1; i ++)
    {
        mi = min(mi, p[i + 1] - p[i]);
    }
    //如果把两牛放在一个区间里
    int y = max(p[0] / 2, (n - p[cnt - 1]) / 2);
    for(int i = 0; i < cnt - 1; i ++)
    {
        y = max((p[i + 1] - p[i] )/ 3, y);
    }
    //如果把两牛放在两个区间里
    int y1 = p[0], y2 = n - p[cnt - 1];
    if(y2 > y1)swap(y1, y2);
    for(int i = 0; i < cnt - 1; i ++)
    {
        int d = (p[i + 1] - p[i]) / 2;
        if(d >= y1 )y2 = y1, y1 = d;
        else if(d > y2)y2 = d;
    }
    printf("%d",min(mi, max(y,y2)));
}
全部评论

相关推荐

我见java多妩媚:大外包
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务