不说什么了这题真的解不出来。看了题解,规律一层套一层,题目越来越难了加油吧。
/*
ID:jinbo wu
PROG:lamps
LANG:C++
*/
#include<bits/stdc++.h>
using namespace std;
int light[9][7]={
0,0,0,0,0,0,0,
0,0,0,0,0,0,0,//按1
0,0,0,1,1,1,0,//按1按4
0,0,1,0,1,0,1,//按3
0,0,1,1,0,1,1,//按1按4
0,1,0,0,1,0,0,//按4
0,1,0,1,0,1,0,//按2
0,1,1,0,0,0,1,//按2按4
0,1,1,1,1,1,1,//不按
};//常量表
int sta[101];
int minnum[9]={0,1,2,1,1,2,1,2,0};//对应常量表8个状态最少摁的次数
int main()
{
freopen("lamps.in","r",stdin);
freopen("lamps.out","w",stdout);
int n,c,x;
memset(sta,-1,sizeof(sta));
cin>>n>>c;
while(cin>>x&&x!=-1)
{
sta[x]=1;
}
while(cin>>x&&x!=-1)
{
sta[x]=0;
}
bool flag1=false;
bool flag2=true;
for(int i=1;i<9;i++)
{
flag2=true;
for(int j=1;j<=n;j++)
{
if(sta[j]==-1)
continue;
int tmp=j%6;
if(tmp==0) tmp=6;
if(light[i][tmp]!=sta[j])
{
flag2=false;
break;
}
}
if(flag2&&c>=minnum[i])
{
flag1=true;
for(int j=1;j<=n;j++)
{
int tmp=j%6;
if(tmp==0) tmp=6;
cout<<light[i][tmp];
}
cout<<endl;
}
}
if(!flag1)
cout<<"IMPOSSIBLE"<<endl;
}