比赛 |
20120612 |
评测结果 |
AAAAA |
题目名称 |
灯光 |
最终得分 |
100 |
用户昵称 |
王者自由 |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2012-06-12 20:41:28 |
显示代码纯文本
#include <cstdio>
#include <cstring>
#include <cstdlib>
const int N = 100 + 10;
struct light {
char c[N];
} a[20];
int n, c, t, x[N], y[N];
int i, j, k, l, r;
int cmp(const void *a, const void *b) {
char *c1, *c2;
c1 = (*(light *)a).c;
c2 = (*(light *)b).c;
return strcmp(c1, c2);
}
inline void state(int i) {
a[t].c[i] = '1' - a[t].c[i] + '0';
}
bool ok(int i) {
if(strcmp(a[i].c, a[i-1].c) == 0) return false;
for(j=1; j<=x[0]; j++) if(a[i].c[x[j]-1] == '0') return false;
for(j=1; j<=y[0]; j++) if(a[i].c[y[j]-1] == '1') return false;
return true;
}
int main() {
freopen("partya.in", "r", stdin);
freopen("partya.out", "w", stdout);
scanf("%d%d", &n, &c);
i = 1; while(scanf("%d", x+i), x[i] >= 0) i++; x[0] = i - 1;
i = 1; while(scanf("%d", y+i), y[i] >= 0) i++; y[0] = i - 1;
// 少年,5 s 不该枚举么?
for(i=0; i<2; i++) for(j=0; j<2; j++)
for(k=0; k<2; k++) for(l=0; l<2; l++) {
if((r = i + j + k + l) > c) continue;
if(r % 2 != c % 2) continue;
memset(a[++t].c, '1', n);
if(i) for(r=0; r<n; r+=1) state(r);
if(j) for(r=0; r<n; r+=2) state(r);
if(k) for(r=1; r<n; r+=2) state(r);
if(l) for(r=0; r<n; r+=3) state(r);
}
qsort(a+1, t, sizeof(light), cmp);
for(i=1; i<=t; i++)
if(ok(i)) puts(a[i].c);
return 0;
}