题解 | #玛雅人的密码#

玛雅人的密码

http://www.nowcoder.com/practice/761fc1e2f03742c2aa929c19ba96dbb0

用map居然不会超时甚至还蛮快,map比我想象中牛逼好多

#include <cstdio>
#include <iostream>
#include <queue>
#include <algorithm> 
#include <string>
#include <cstring>
#include <map>

using namespace std;

map<string, int> m;

int BFS(string &s){
	queue<string> q;
	string &current = s;
	q.push(current);
	m.insert(make_pair(current, 0));
	while(current.find("2012") == string::npos && !q.empty()){
		q.pop();
		for(int i=0; i<s.size()-1; i++){
			swap(current[i], current[i+1]);
			if(!m.count(current)){
				q.push(current);
				m.insert(make_pair(current, 0));
				string tmp = current;
				swap(current[i], current[i+1]);
				m[tmp] = m[current]+1;
			}else{
				swap(current[i], current[i+1]);
			}
			
		}
		current = q.front();
	}
	if(q.empty()){
		return -1;
	}
	return m[current];
}

int main(){
	int n;
	string s;
	while(scanf("%d",&n) != EOF){
		cin >> s;
		printf("%d\n",BFS(s));
	}
	return 0;
}
全部评论

相关推荐

10-30 23:23
已编辑
中山大学 Web前端
去B座二楼砸水泥地:这无论是个人素质还是专业素质都👇拉满了吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务