思维题
思路
做的时候情况漏了一种o.o…
三种情况:
1.n+1到0,n+1->1->…->n
2.n到n+1,1->2->…->n->n+1
3.序列任意相邻的两个数为01.假设序列的第i个元素为0,第i+1个元素为1,则1->…->i->n+1->i+1…->n
代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1e4+10;
int t,a[N];
int main()
{
cin>>t;
while(t--)
{
int n;
cin>>n;
int last=-1,flag1=0,flag2=0,flag3=0,flag4=0;
memset(a,0,sizeof a);
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
if(last==0&&x==1&&!flag4)
{
flag1=1;
a[i-1]=1;
flag4=1;//这地方没有标志变量flag4就寄了
}
if(i==n&&x==0)
flag2=1;
if(i==1&&x==1)
flag3=1;
last = x;
}
if(flag1==1)
{
for(int i=1;i<=n;i++)
{
if(a[i]==1)
cout<<i<<" "<<n+1<<" ";
else
cout<<i<<" ";
}
cout<<endl;
}
else if(flag2==1)
{
for(int i=1;i<=n;i++)
cout<<i<<" ";
cout<<n+1<<endl;
}
else if(flag3==1)
{
cout<<n+1<<endl;
for(int i=1;i<=n;i++)
cout<<i<<" ";
cout<<endl;
}
else
cout<<-1<<endl;
}
return 0;
}