题解 | 01序列

01序列

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

#include<bits/stdc++.h>
using namespace std;

using ll=long long;
using ull=unsigned long long;
using i128=__int128_t;
using u128=__uint128_t;
using ld=long double;

void solve()
{
	int n,m;
	cin >> n;
	vector<int>v(n,0);
	for(int i=0;i<n;i++) cin >> v[i];
	cin >> m;
	int sum=0;
	for(int i=0,j=0;i<n&&j<n;)//双指针扫一遍 找出大于3的连续是0的段的可容纳1的长度和
	{
		if(v[j]==0) j++;
		if(v[j]==1)
		{
			if((j-i)%2==0)//注意奇偶可容纳的1的数量不同
			{
				sum+=j-i>=3?(j-i)/2-1:0;
				j=i=j+1;
			}
			else
			{
				sum+=j-i>=3?(j-i)/2:0;
				j=i=j+1;
			}
		}
		if(v[j]==0&&j==n-1) sum+=j-i>=3?(j-i)/2:0;//特判结尾 因为结尾有可能不是1
	}
	if(sum>=m) cout << "true";
	else cout << "false";
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	
	int t=1;
	//cin >> t;
	
	while(t--)
	{
		solve();
	}
	return 0;
}

全部评论

相关推荐

01-11 08:47
门头沟学院 Java
choumoduji...:读研的目的就是为了以最快的速度和最低的要求完成“学校”规定的毕业标准,而不是所谓课题组的要求
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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