用状态压缩做的,为什么不输出啊。@各路神犇

P1092 [NOIP2004 提高组] 虫食算

我的也不输出 ```cpp #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #define lowbit(x) (x&(-x)) using namespace std; int n, dist[26],sk; char logs[67108864]; char s[3][27]; void print() { for (int i = 0; i < n; i++) { cout << dist[i]; } } void css(int x, int y, int jw) { if (x == 0) { if (jw == 0) { print();// } return; } for (int i = x - 1; i >= 1; i--) { int w1 = dist[s[1][i]]; int w2 = dist[s[2][i]]; int w3 = dist[s[3][i]]; if (w1 == -1 || w2 == -1 || w3 == -1) continue; //why if ((w1 + w2) % n != w3 && (w1 + w2 + 1) % n != w3)return; } if(dist[s[y][x]]==-1) { int st = sk; while (st != 0) { int nxt = lowbit(st); int i = logs[nxt]; st = st & (~nxt); if (y != 3)//赋值 { dist[s[y][x]] = i; sk = sk & (~nxt); css(x, y + 1, jw); dist[s[y][x]] = -1; sk = sk | nxt; } else//判断赋值 { int w1 = dist[s[1][x]] + dist[s[2][x]] + jw; if (w1%n != i) continue; dist[s[3][x]] = i; sk = sk & (~nxt); css(x - 1, 1, w1 / n); dist[s[3][x]] = -1; sk = sk | nxt; } } } else if (y != 3)//赋值 css(x, y + 1, jw); else//判断赋值 { int w1 = dist[s[1][x]] + dist[s[2][x]] + jw; if (w1%n != dist[s[3][x]]) return; css(x - 1, 1, w1 / n); } } int main() { cin >> n ; for (int i = 1; i <= 3; i++) { scanf("%s", s[i]+1); for(int j=1;j<=n;j++) { s[i][j] -= 'A'; } } for (int i = 1; i <= n; i++) { logs[1 << (i - 1)] = n - i + 1; } sk = (1 << n) - 1; memset(dist, -1, sizeof(dist)); css(n,1,0); return 0; } ```
by a66666 @ 2018-06-03 21:58:45


|