AtCoder ARC #108 : D - AB

问题

题目

在初始状态下,有一个字符串"AB",执行以下过程,直到此字符串的长度为 N。

按此顺序选择字符 x 和 y 的相邻位置,然后插入字符 C[x] [y]。

最终可能的字符串数量是多少?

暴力打表找规律,考虑C[x][y]的不同取值

打表代码

const int maxn = 1e5 + 7;
const int mod = 1e9 + 7;

int n, m, k, t, a[maxn];

string s = "AB";
char c[2][2];
set<string> mp;
void dfs(int n)
{
    if (n == 0) {
        mp.insert(s);
        return;
    }
    for (int i = 0; i + 1 < s.size(); i++) {
        if (s[i] == 'A' && s[i + 1] == 'B') {
            s.insert(i + 1, 1, c[0][1]);
            dfs(n - 1);
            s.erase(i + 1, 1);
        } else if (s[i] == 'A' && s[i + 1] == 'A') {
            s.insert(i + 1, 1, c[0][0]);
            dfs(n - 1);
            s.erase(i + 1, 1);
        } else if (s[i] == 'B' && s[i + 1] == 'A') {
            s.insert(i + 1, 1, c[1][0]);
            dfs(n - 1);
            s.erase(i + 1, 1);
        } else if (s[i] == 'B' && s[i + 1] == 'B') {
            s.insert(i + 1, 1, c[1][1]);
            dfs(n - 1);
            s.erase(i + 1, 1);
        }
    }
}

int main()
{
    for (int caa = 0; caa <= 1; caa++)
        for (int cab = 0; cab <= 1; cab++)
            for (int cba = 0; cba <= 1; cba++)
                for (int cbb = 0; cbb <= 1; cbb++) {
                    c[0][0] = caa + 'A', c[0][1] = cab + 'A', c[1][0] = cba + 'A', c[1][1] = cbb + 'A';
                    cout << c[0] << c[1] << endl;
                    for (int i = 1; i <= 10; i++) {
                        mp.clear(), s = "AB";
                        dfs(i);
                        cout << mp.size() << " ";
                    }
                    cout << endl;
                }
}
/*
AAAAAA
1 1 1 1 1 1 1 1 1 1
AAABAB
1 1 1 1 1 1 1 1 1 1
AABABA
1 1 1 1 1 1 1 1 1 1
AABBBB
1 1 1 1 1 1 1 1 1 1
ABAAAA
1 2 4 8 16 32 64 128 256 512
ABABAB
1 1 1 1 1 1 1 1 1 1
ABBABA
1 2 3 5 8 13 21 34 55 89
ABBBBB
1 1 1 1 1 1 1 1 1 1
BAAAAA
1 2 3 5 8 13 21 34 55 89
BAABAB
1 2 3 5 8 13 21 34 55 89
BABABA
1 2 4 8 16 32 64 128 256 512
BABBBB
1 2 4 8 16 32 64 128 256 512
BBAAAA
1 2 4 8 16 32 64 128 256 512
BBABAB
1 1 1 1 1 1 1 1 1 1
BBBABA
1 2 3 5 8 13 21 34 55 89
BBBBBB
1 1 1 1 1 1 1 1 1 1
*/

posted @ 2020-11-30 18:41  naymi  阅读(52)  评论(0)    收藏  举报