#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+10;
int a[N],x[N],b[N],n;
//计算x数组里所有值
void fun()
{
for(int i=3;i<n;i++)
{
x[i+1]=a[i]-x[i]-x[i-1];
}
}
//判断x[1],x[2]属于00,01,10,11的四种情况中的哪一种
void fun2()
{
//第一步判断简单的11,00情况
if(a[1]==2) x[1]=x[2]=1;
if(a[1]==0) x[1]=x[2]=0;
x[3]=a[2]-a[1];
if(a[1]==2||a[1]==0) fun();
//如果不是前两种,先假设情况是01(字典序更小)
if(a[1]==1)
{
x[1]=0;
x[2]=1;
fun();
for(int i=1;i<=n;i++)
{
b[i]=x[i-1]+x[i]+x[i+1];
//如果01情况不行,就是10的情况
if(b[i]!=a[i]||(x[i]!=1&&x[i]!=0))
{
x[1]=1;
x[2]=0;
fun();
break;
}
}
}
//输出结果
for(int i=1;i<=n;i++) cout<<x[i]<<" ";
}
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
//输入a数组的值
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
fun2();
return 0;
}
蓝桥杯预热赛—求解线性方程组(暴力枚举法)
最新推荐文章于 2024-07-21 11:20:00 发布