2013年12月10日 星期二
[USACO] 2-2-4 Party Lamps
/*
ID: 551100k1
LANG: C++
TASK: lamps
*/
#include<stdio.h>
#include<map>
#include<vector>
#include<iostream>
#include<algorithm>
using namespace std;
map<string,map<int,int> > ma;
map<string,int> rr;
int n,c;
vector<int> A,B;
vector<string> arr;
string a;
void dfs(string s,int v){
int i;
if(v==c){
return;
}
a=s;
for(i=0;i<n;i++)
if(a[i]=='0') a[i]='1';
else a[i]='0';
if(ma[a][v]==0){
if(v%2+c%2==1 && rr[a]==0) arr.push_back(a),rr[a]=1;
ma[a][v]=1;
dfs(a,v+1);
}
a=s;
for(i=0;i<n;i+=2)
if(a[i]=='0') a[i]='1';
else a[i]='0';
if(ma[a][v]==0){
if(v%2+c%2==1 && rr[a]==0) arr.push_back(a),rr[a]=1;
ma[a][v]=1;
dfs(a,v+1);
}
a=s;
for(i=1;i<n;i+=2)
if(a[i]=='0') a[i]='1';
else a[i]='0';
if(ma[a][v]==0){
if(v%2+c%2==1 && rr[a]==0) arr.push_back(a),rr[a]=1;
ma[a][v]=1;
dfs(a,v+1);
}
a=s;
for(i=0;i<n;i+=3)
if(a[i]=='0') a[i]='1';
else a[i]='0';
if(ma[a][v]==0){
if(v%2+c%2==1 && rr[a]==0) arr.push_back(a),rr[a]=1;
ma[a][v]=1;
dfs(a,v+1);
}
}
bool check(string s){
int i;
for(i=0;i<A.size();i++)
if(s[A[i]]=='0')
return 0;
for(i=0;i<B.size();i++)
if(s[B[i]]=='1')
return 0;
return 1;
}
int main(){
freopen("lamps.in","r",stdin);
freopen("lamps.out","w",stdout);
int x,i,is=1;
scanf("%d%d",&n,&c);
while(scanf("%d",&x) && x!=-1) A.push_back(x-1);
while(scanf("%d",&x) && x!=-1) B.push_back(x-1);
string s;
for(i=0;i<n;i++)
s+='1';
if(c%2==0) arr.push_back(s);
rr[s]=1;
dfs(s,0);
sort(arr.begin(),arr.end());
for(i=0;i<arr.size();i++){
if(check(arr[i]))
puts(arr[i].c_str()),is=0;
}
if(is) puts("IMPOSSIBLE");
}
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言