更新日志:
2024.8.17 写下文章
2024.8.26 改进代码
---------------------------------------------------超级可爱的分割线---------------------------------------------------
正文
今天我快快乐乐的来到了luogu.com.cn,想刷刷DFS的题,但是我突然看到了这么一道题:题目传送门
嗯?这能用DFS?疑惑的我看了看题解。都是二进制枚举啊!问题是我不太能看懂二进制枚举,于是就气不打一处来,决定手写一个非常暴力的程序。
思路:把n的所有情况一一枚举出来,然后有几种情况写几个循环,这里用到一个常用技巧:宏定义,不懂得可以来这里看一下。(翻到最下面)
话不多说,先上代码(代码后面还有话的)
#include <iostream>
#define f(A) for (int A = 1; A <= 2; A++)
#define i(A) if (A == 2) cout << 'Y'; else cout << 'N';
#define q cout << endl;
using namespace std;
int main() {
int n;
cin >> n;
if (n == 1) {
f(i1) {
i(i1)
q
}
} else if (n == 2) {
f(i1)
f(i2) {
i(i1)
i(i2)
q
}
} else if (n == 3) {
f(i1)
f(i2)
f(i3) {
i(i1)
i(i2)
i(i3)
q
}
} else if (n == 4) {
f(i1)
f(i2)
f(i3)
f(i4) {
i(i1)
i(i2)
i(i3)
i(i4)
q
}
} else if (n == 5) {
f(i1)
f(i2)
f(i3)
f(i4)
f(i5) {
i(i1)
i(i2)
i(i3)
i(i4)
i(i5)
q
}
} else if (n == 6) {
f(i1)
f(i2)
f(i3)
f(i4)
f(i5)
f(i6) {
i(i1)
i(i2)
i(i3)
i(i4)
i(i5)
i(i6)
q
}
} else if (n == 7) {
f(i1)
f(i2)
f(i3)
f(i4)
f(i5)
f(i6)
f(i7) {
i(i1)
i(i2)
i(i3)
i(i4)
i(i5)
i(i6)
i(i7)
q
}
} else if (n == 8) {
f(i1)
f(i2)
f(i3)
f(i4)
f(i5)
f(i6)
f(i7)
f(i8) {
i(i1)
i(i2)
i(i3)
i(i4)
i(i5)
i(i6)
i(i7)
i(i8)
q
}
} else if (n == 9) {
f(i1)
f(i2)
f(i3)
f(i4)
f(i5)
f(i6)
f(i7)
f(i8)
f(i9) {
i(i1)
i(i2)
i(i3)
i(i4)
i(i5)
i(i6)
i(i7)
i(i8)
i(i9)
q
}
} else if (n == 10) {
f(i1)
f(i2)
f(i3)
f(i4)
f(i5)
f(i6)
f(i7)
f(i8)
f(i9)
f(i0) {
i(i1)
i(i2)
i(i3)
i(i4)
i(i5)
i(i6)
i(i7)
i(i8)
i(i9)
i(i0)
q
}
}
return 0;
}
番外:
当我把这串代码交上去时,发现只有两个测试点。。。
我帮你们看到了,这两个点分别是n=1和n=10的情况。
所以如果你们要用这个方法,只需要这样的代码:
#include <iostream>
#define f(A) for (int A = 1; A <= 2; A++)
#define i(A) if (A == 2) cout << 'Y'; else cout << 'N';
#define q cout << endl;
using namespace std;
int main() {
int n;
cin >> n;
if (n == 1) {
f(i1) {
i(i1)
q
}
} else if (n == 10) {
f(i1)
f(i2)
f(i3)
f(i4)
f(i5)
f(i6)
f(i7)
f(i8)
f(i9)
f(i0) {
i(i1)
i(i2)
i(i3)
i(i4)
i(i5)
i(i6)
i(i7)
i(i8)
i(i9)
i(i0)
q
}
}
return 0;
}
END