U135075 简单数列 TJ

题目链接

思路

构造,不会。
直接暴搜。(考场上不敢写于是骗了点分)
据说还是最简单的题 \(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 ("\n");
		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;
}

posted @ 2020-11-01 15:43  tuscjaf  阅读(61)  评论(0编辑  收藏  举报