题解 | 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函数的内容,能理解就行)
查看8道真题和解析