思路
构造,不会。
直接暴搜。(考场上不敢写于是骗了点分)
据说还是最简单的题 (XD)。
代码
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 510;
int n ,a[MAXN] ,flag = 0;
void dfs (int i) {
if (i == n + 1) {
flag = 1;
for (int q = 1;q <= n;++ q)
printf ("%d ",a[q]);
printf ("
");
return ;
}
int b[5] = {0};
for (int len = 1;len <= i / 2;++ len) {
for (int q = i - len + 1;q <= i - 1;++ q)
if (a[q] != a[q - len]) goto H;
b[a[i - len]] = 1;
H :;
}
for (int q = 1;q <= 4;++ q) {
if (! b[q]) {
a[i] = q;
dfs (i + 1);
a[i] = 0;
if (flag) return ;
}
}
}
int main () {
scanf ("%d",&n);
dfs (1);
return 0;
}