20分WA求助
查看原帖
20分WA求助
985990
fausttl楼主2024/3/23 23:43
#include<bits/stdc++.h>
#define PI pair<int,int>
//#define int long long
#define endl '\n'

using namespace std;

const int N=5e5+10;
const int M=2e6+10;
const int MOD=1000000007;
const int INF=0x3f3f3f3f;

int s;
int cnt[200000];
queue<int> que;

signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0); 
	
	memset(cnt,0x3f,sizeof(cnt));
	cin>>s;
	cnt[s]=0;
	que.push(s);
	while(que.size()){
		int x=que.front();
		que.pop();
//		cout<<x<<endl; 
		string xs=to_string(x);
		//交换
		for(int i=1;i<xs.size();i++){
			string xss=xs;
			swap(xss[i],xss[i-1]);
			int xx=atoi(xss.c_str());
			if(cnt[xx]!=INF) continue;
//			cout<<"交换 "<<xss<<endl;
			cnt[xx]=cnt[x]+1;
			que.push(xx);
		} 
		//删除
		if(xs.size()>=2){
			for(int i=0;i<xs.size();i++){
				string xss;
//				string xss=xs.substr(0,i)+xs.substr(i+1,xs.size()-i-1);	
				xss+=xs.substr(0,i);
				xss+=xs.substr(i+1,xs.size()-i-1);
				int xx=atoi(xss.c_str());	
				if(cnt[xx]!=INF) continue;
//				cout<<"删除 "<<xss<<endl;
				cnt[xx]=cnt[x]+1;
				que.push(xx);					
			}
		} 
		//添加
		for(int i=0;i<xs.size()-1;i++){
			char s1=xs[i],s2=xs[i+1];
			for(char c=s1+1;c<s2;c++){
				string xss;
//				string xss=xs.substr(0,i+1)+c+xs.substr(i+1,xs.size()-i-1);
				xss+=xs.substr(0,i+1);
				xss+=c;
				xss+=xs.substr(i+1,xs.size()-i-1);
				int xx=atoi(xss.c_str());
				if(xx>s) continue;	
				if(cnt[xx]!=INF) continue;
//				cout<<"添加 "<<xss<<endl;
				cnt[xx]=cnt[x]+1;
				que.push(xx);
			}
		}		 
	}
	
	int nn;
	cin>>nn;
	while(nn--){
		int a;
		cin>>a;
		if(cnt[a]==INF) cout<<-1<<endl;
		else cout<<cnt[a]<<endl;
	}

}  


2024/3/23 23:43
加载中...