【悬二关】0pts 全TLE,样例不过求助
查看原帖
【悬二关】0pts 全TLE,样例不过求助
782768
Mierstan085楼主2024/8/5 14:51
// Problem: P1132 数字生成游戏
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P1132
// Memory Limit: 125 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

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

queue <string> q;
map <string, int> mp;
string s, tt;

void bfs(){
	q.push(s);
	mp[s] = 1;
	while (!q.empty()){
		string ss = q.front(); q.pop();
		for (int i = 0; i < ss.size() - 1; i ++){
			for (int j = i + 1; j < ss.size(); j ++){
				string sa = ss; swap(sa[i], sa[j]);
				if (mp[sa]) continue;
				mp[sa] = mp[ss] + 1;
				q.push(sa);
			}
		}
		
		for (int i = 0; i < ss.size(); i ++){
			string sa = ss;
			sa.erase(i);
			if (mp[sa]) continue;
			mp[sa] = mp[ss] + 1;
			q.push(sa);
		}
		
		if (ss.size() >= s.size()) continue;
		for (int i = 1; i < ss.size(); i ++){
			for (int j = ss[i - 1] - '0' + 1; j < ss[i] - '0'; j ++){
				string ii = to_string(j);
				string sa = ss.insert(i, ii);
				if (mp[sa]) continue;
				mp[sa] = mp[ss] + 1;
				q.push(sa);
			}
		}
		
	}
}

int main(){
	cin >> s;
	int T;
	bfs();
	for (cin >> T; T --; ){
		cin >> tt;
		if (mp[tt]) cout << mp[tt] - 1 << endl;
		else puts("-1");
	}
}
2024/8/5 14:51
加载中...