首页 > 其他 > 详细

SCUT - 15 - 为美好的世界献上爆炎 - dfs

时间:2019-06-14 17:18:44      阅读:93      评论:0      收藏:0      [点我收藏+]

https://scut.online/p/15
样例错了,按题目说的去做就AC了。
反向搜索使得最终比较strncmp的时候复杂度下降了很多(虽然应该可行性剪枝也少了)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

char s[64],t[64];
int cntE,cntX;
int maxl;

bool dfs(int curl,int E,int X) {
    if(curl==maxl) {
        if(cntE==E&&cntX==X&&strncmp(s,t,maxl)==0)
            return true;
        else
            return false;
    } else {
        if(s[curl-1]=='E'&&E-1>=cntE) {
            if(dfs(curl-1,E-1,X)) {
                return true;
            }
        }
        if(s[curl-1]=='X'&&X-1>=cntX) {
            reverse(s,s+curl-1);
            if(dfs(curl-1,E,X-1)) {
                return true;
            }
            reverse(s,s+curl-1);
        }
        return false;
    }
}

int main() {
#ifdef Yinku
    freopen("Yinku.in","r",stdin);
#endif // Yinku
    int T;
    scanf("%d",&T);
    while(T--) {
        scanf("%s%s",t,s);

        maxl=strlen(t);
        cntE=0;
        cntX=0;
        for(int i=0; i<maxl; i++) {
            if(t[i]=='E')
                cntE++;
            else
                cntX++;
        }

        int l=strlen(s);
        int curE=0,curX=0;
        for(int i=0; i<l; i++) {
            if(s[i]=='E')
                curE++;
            else
                curX++;
        }
        if(dfs(l,curE,curX)) {
            puts("Explosion!");
        } else {
            puts("Dekimasen");
        }
    }
    return 0;
}

SCUT - 15 - 为美好的世界献上爆炎 - dfs

原文:https://www.cnblogs.com/Yinku/p/11024258.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!