关于CFD题
  • 板块学术版
  • 楼主hahaxiang
  • 当前回复8
  • 已保存回复8
  • 发布时间2023/7/28 00:38
  • 上次更新2023/11/3 07:17:42
查看原帖
关于CFD题
713562
hahaxiang楼主2023/7/28 00:38

我的思路是将相邻的1和2缩成块,然后对于2和1一次贪心 代码:

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+100;
int a[N],n,ans;
bool f[N];
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		if(a[i]==1&&a[i-1]==1)
		i--,n--;
		else if(a[i]==2&&a[i-1]==2)
		i--,n--;
	}
	for(int i=1;i<=n;i++)
	{
		if(a[i]==2)
		{
			ans++;
			f[i]=1;
			f[i-1]=1;
			f[i+1]=1;
		}
	}
	for(int i=1;i<=n;i++)
	{
		if(a[i]==1)
		{
			if(f[i]==0)
			{
				f[i]=1;
				ans++;
			}
			if(i!=1&&f[i-1]==0)
			{
				f[i-1]=1;
			}
			else if(i!=n&&f[i+1]==0)
			{
				f[i+1]=1;
			}
		}
	}
	for(int i=1;i<=n;i++)
	{
		if(f[i]==0)
		ans++;
	}
	cout<<ans;
	return 0;
}

但是wa了,代码求调

2023/7/28 00:38
加载中...