题解 | 01序列

01序列

https://www.nowcoder.com/practice/b0c948dbe577485598b982a430d65c39

void Aiden()
{
    ll n;
    cin >> n;
    cnt = 1;
    for (ll i = 1; i <= n;i++)
    {
        cin >> x;
        if (x)
        {
            num += (cnt - 1) / 2;
            cnt = 0;
        }
        else
            cnt++;
    }
    num += cnt / 2;
    cin >> m;
    cout << (num >= m ? "true" : "false") << endl;
}

简单题喵,顺手写个题解了就,注意到如果起始为0(即到第一个1之前),每有2个0,可以放1的位置就加一,但是注意到如果是中间的情况(即两个1中间夹0),有cnt个0时,可以插入(cnt - 1)/ 2个1,那为了我们写程序是统计方便,不妨可以在数组的头部看上加了一个“1 0”,然后初始cnt加上1,这样对于头部0的统计情况就也跟中间的情况一样了。记得跑完循环以后还要处理尾部,跟头部情况一样,每有2个0就能放一次1。

程序的核心反正就是遇到0就累加cnt,遇到1就结算,同时cnt清零,应该还是很好理解的

(代码只贴了solve函数的内容,能理解就行)

全部评论

相关推荐

牛至超人:您好,京东物流岗了解一下吗?负责精加工食品的端到端传输
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务