/*
ID: Jang Lawrence
PROG: lamps
LANG: C++
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
#define mp make_pair
using namespace std;
typedef long long lng;
int n,c,an;
vector<int> s0,s1;
int turn_id[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int num[]={0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4};
struct lamp
{
bool on[101];
int nx;
void lampsk(){for(int i=1;i<=n;++i) on[i]=1;}
bool f()
{
for(int i=0;i<s0.size();++i)
if(on[s0[i]]) return 0;
for(int i=0;i<s1.size();++i)
if(!on[s1[i]]) return 0;
if(c>=nx&&c%2==nx%2)
return 1;
return 0;
}
void turn(int opt)
{
if(opt==3)
{
for(int i=1;i<=n;++i)
on[i]=!on[i];
}
else
if(opt==2)
{
for(int i=1;i<=n;i+=2)
on[i]=!on[i];
}
else
if(opt)
{
for(int i=2;i<=n;i+=2)
on[i]=!on[i];
}
else
for(int i=1;i<=n;i+=3)
on[i]=!on[i];
}
void print()
{
for(int i=1;i<=n;++i)
if(on[i]) printf("1");
else printf("0");
puts("");
an++;
}
}a[16];
bool cmp(lamp p,lamp q)
{
for(int i=1;i<=n;++i)
if(!p.on[i]&&q.on[i]) return 1;
else if(p.on[i]&&!q.on[i]) return 0;
return 1;
}
int main()
{
#ifndef DEBUG
freopen("lamps.in","r",stdin);
freopen("lamps.out","w",stdout);
#endif
scanf("%d%d",&n,&c);
int v;
while(1)
{
scanf("%d",&v);
if(v==-1)
break;
s1.push_back(v);
}
while(1)
{
scanf("%d",&v);
if(v==-1)
break;
s0.push_back(v);
}
for(int i=0;i<16;++i)
{
int nu=turn_id[i];
a[i].lampsk();
for(int j=0;j<4;++j)
if(nu&(1<<j)) a[i].turn(j);
a[i].nx=num[i];
}
sort(a,a+16,cmp);
for(int i=0;i<16;++i)
if(a[i].f())a[i].print();
if(!an) puts("IMPOSSIBLE");
return 0;
}
USACO:Party Lamps
最新推荐文章于 2018-12-20 13:09:29 发布