noip2012 阅读程序4

来源:互联网 发布:疯狂java讲义光盘下载 编辑:程序博客网 时间:2024/05/16 11:16
#include<cstdio>#include<cstring>#include<math.h>#include<stdlib.h>#include<algorithm>#include<ctime>#include<iostream>using namespace std;const int maxn=1000;int lefts[20],rights[20],father[20];string s1,s2,s3;int n,ans;void calc(int x,int dep){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(){#ifndef ONLINE_JUDGE  freopen("in.txt","r",stdin);#endifint i,j;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);//printf("%.2lf\n",(double)clock()/CLOCKS_PER_SEC);  return 0;}/**/

原创粉丝点击