我的思路是将相邻的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了,代码求调