扫雷
http://hihocoder.com/problemset/problem/1114?sid=250113
第一位是0或者1,两种情况都试一下(最坏情况下)。
/* hiho1114
* @author:zorroshen
*/
#include <iostream>
#include <vector>
using namespace std;
int n;
int array[100001];
int res[100001];
int check(int i){
if (i==0)
{
return res[i]+res[i+1];
}
if (i==n-1)
{
return res[i-1]+res[i];
}
return res[i-1]+res[i]+res[i+1];
}
int main(){
for(int i=0;i<=100001;++i) res[i]=0;
int times;cin>>times;
for(int i=0;i<times;++i){
cin>>n;
for(int i=0;i<n;++i){
cin>>array[i];
}
for(int i=0;i<=100001;++i) res[i]=0;
bool res0_1 = false;
res[0]=1;
for (int i = 0; i < n-1; ++i)
{ // cout<<array[i]<<" "<<check(i)<<endl;
if (array[i]==check(i))
{
res[i+1] = 0;
continue;
}
else if(array[i]==check(i)+1){
res[i+1] = 1;
continue;
}else{
res0_1 = true;
break;
}
}
//cout<<"####"<<array[n-1]<<" "<<check(n-1)<<endl;
if(array[n-1]!=check(n-1)) res0_1 = true;
if (res0_1)
{
bool res0_0 = false;
for(int i=0;i<=100001;++i) res[i]=0;
res[0]=0;
for (int i = 0; i < n-1; ++i)
{
if (array[i]==check(i))
{
res[i+1] = 0;
}
else if(array[i]==check(i)+1){
res[i+1] = 1;
}else{
res0_0 = true;
break;
}
}
}
// for (int i = 0; i < n; ++i)
// {
// cout<<res[i]<<" ";
// }
// cout<<endl;
int numOf1 =0,count=0;
vector<int> vec0,vec1;
for(int k=0;k<n;++k){
if(res[k]==0) vec0.push_back(k);
else if(res[k]==1) vec1.push_back(k);
}
cout<<vec1.size()<<" ";
for(size_t t =0;t<vec1.size()-1;++t){
cout<<vec1[t]+1<<" ";
}
cout<<vec1[vec1.size()-1]+1<<endl;
cout<<vec0.size()<<" ";
for(size_t t =0;t<vec0.size()-1;++t){
cout<<vec0[t]+1<<" ";
}
cout<<vec0[vec0.size()-1]+1<<endl;
}
}