题库 信息学奥赛题库 题目列表 #include <iostream>#include <string>us...
填空题

#include <iostream>

#include <string>

using namespace std;

int lefts[20], rights[20], father[20];

string s1, s2, s3;

int n, ans;

void calc(int x, int dep)

{

    ans = ans + dep*(s1[x] - 'A' + 1);

    if (lefts[x] >= 0) calc(lefts[x], dep+1);

    if (rights[x] >= 0) calc(rights[x], dep+1);

}

void check(int x)

{

    if (lefts[x] >= 0) check(lefts[x]);

    s3 = s3 + s1[x];

    if (rights[x] >= 0) check(rights[x]);

}

void dfs(int x, int th)

{

    if (th == n)

    {

        s3 = "";

        check(0);

        if (s3 == s2)

        {

            ans = 0;

            calc(0, 1);

            cout<<ans<<endl;

        }

        return;

    }

    if (lefts[x] == -1 && rights[x] == -1)

    {

        lefts[x] = th;

        father[th] = x;

        dfs(th, th+1);

        father[th] = -1;

        lefts[x] = -1;

    }

    if (rights[x] == -1)

    {

        rights[x] = th;

        father[th] = x;

        dfs(th, th+1);

        father[th] = -1;

        rights[x] = -1;

    }

    if (father[x] >= 0)

        dfs(father[x], th);

}

int main()

{

    cin>>s1;

    cin>>s2;

    n = s1.size();

    memset(lefts, -1, sizeof(lefts));

    memset(rights, -1, sizeof(rights));

    memset(father, -1, sizeof(father));

    dfs(0, 1);

}

输入:

ABCDEF

BCAEDF

输出:__________

题目信息
2012年 初赛
-
正确率
0
评论
62
点击