8.19小红书笔试第二题卡9%(bfs做法)

#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>
#include <queue>
#include <set>
using namespace std;

unordered_map<string,string> map;//合法的变换
unordered_map<string,string> map1;//合法的变换

bool judge(string st){
    string temp;
    for(int i = st.size()-1;i>=0;i--){
        temp.push_back(st[i]);
    }
    if(temp == st){
        return true;
    }
    return false;
}

int search(string start){
    queue<string> que;
    set<string> visited;
    que.push(start);
    visited.insert(start);

    while(!que.empty()){
      int sz = que.size();
      for(int u=0;u<sz;++u){
        string front = que.front();que.pop();
        if(judge(front)){
            return 1;
        }
        for(int i=0;i<front.size();i++){
            string temp;
            temp.push_back(front[i]);
            if(!map.count(temp)&&!map1.count(temp)){
                continue;
            }
            if(map.count(temp) && !map1.count(temp)){
                string forward;
                string back;
                string addst = forward.assign(front.begin(),front.begin()+i) + map[temp] + back.assign(front.begin()+i+1,front.end());
                if(visited.count(addst)==0){
                    que.push(addst);
                    visited.insert(addst);
                }
                continue;
            }
            if(!map.count(temp) && map1.count(temp)){
                string forward;
                string back;
                string addst = forward.assign(front.begin(),front.begin()+i) + map1[temp] + back.assign(front.begin()+i+1,front.end());
                if(visited.count(addst)==0){
                    que.push(addst);
                    visited.insert(addst);
                }
                continue;
            }
            if(map.count(temp) && map1.count(temp)){
                string forward;
                string back;
                string addst = forward.assign(front.begin(),front.begin()+i) + map[temp] + back.assign(front.begin()+i+1,front.end());
                string addst1 = forward.assign(front.begin(),front.begin()+i) + map1[temp] + back.assign(front.begin()+i+1,front.end());
                if(visited.count(addst)==0){
                    que.push(addst);/*添加下一层待访问的节点*/
                    visited.insert(addst);
                }
                if(visited.count(addst1)==0){
                    que.push(addst1);/*添加下一层待访问的节点*/
                    visited.insert(addst1);
                }
            }
        } 
      }
    }
    return 0;
}


int main() {
    int n;
    cin>>n;
    vector<string> vec;
    vector<int> res;
    string temp;
    for(int i=0;i<n;++i){
        cin>>temp;
        vec.push_back(temp);
    }

    map["m"] = "nn";
    map["w"] = "vv";

    map["b"] = "d";
    map["p"] = "q";
    map["d"] = "b";
    map["q"] = "p";

    map1["b"] = "q";
    map1["q"] = "b";
    map1["d"] = "p";
    map1["p"] = "d";

    map["n"] = "u";
    map["u"] = "n";

    for(int i=0;i<vec.size();++i){
        res.push_back(search(vec[i]));
    }

    for(int i=0;i<res.size();++i){
        string ss = res[i]==1 ? "YES" : "NO";
        cout<<ss<<endl;
    }


    return 0;

}

路过的大佬帮忙看看,为啥本地用例都对,提交就是9%啊

用的bfs,自己试了好多都是对的,错的测试用例都是啥呀

全部评论
应该是复杂度超了😅 直接贪心尽量把字符换成同一类再判断就行
点赞 回复 分享
发布于 2023-08-20 00:16 湖北
这题其实把可以互相转的转成同一种,然后直接判断回文串就行
点赞 回复 分享
发布于 2023-08-19 21:25 北京
我也奇怪,我刚开始偷懒想先跳,全都返回YES,正确率9%,全都返回NO,正确率9%,后面我自己写好了,也9%,一脸懵
点赞 回复 分享
发布于 2023-08-19 18:57 湖北
卧槽,m还能转uu
点赞 回复 分享
发布于 2023-08-19 18:41 北京
m转uu?
点赞 回复 分享
发布于 2023-08-19 18:40 浙江

相关推荐

不愿透露姓名的神秘牛友
今天 14:50
点赞 评论 收藏
分享
Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务