求助 样例都过 但是就是0分 大佬求助 好奇怪
查看原帖
求助 样例都过 但是就是0分 大佬求助 好奇怪
557730
Sleephead_365楼主2024/11/6 15:46
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <unordered_map>
#include <queue>

using namespace std;

string star="12345678";
unordered_map<string,string> ans;
queue <string> q;

string Awork(string magic){
	char sss[8];
	for(int i=0;i<8;i++){
		sss[7-i]=magic[i];
	}
	return sss;
}
string Bwork(string magic){
	char sss[8];
	sss[0]=magic[3];sss[7]=magic[4];
	for(int i=1;i<=3;i++){
		sss[i]=magic[i-1];
	}
	for(int i=4;i<=6;i++){
		sss[i]=magic[i+1];
	}
	return sss;
}
string Cwork(string magic){
	char sss[8];
	sss[0]=magic[0];sss[3]=magic[3];
	sss[4]=magic[4];sss[7]=magic[7];
	sss[1]=magic[6];sss[2]=magic[1];
	sss[5]=magic[2];sss[6]=magic[5];
	return sss;
}
int bfs(string end0){
	q.push(star);
	ans[star]="";
	while(q.size()){
		auto t=q.front();
		q.pop();
		for(int i=0;i<3;i++){
			string a;
			if(i==0) a=Awork(t);
			else if(i==1) a=Bwork(t);
			else a=Cwork(t);
			if(!ans.count(a)){
				if(i==0) ans[a]=ans[t]+'A';
				else if(i==1) ans[a]=ans[t]+'B';
				else ans[a]=ans[t]+'C';
				if(a==end0) return ans[a].size();
				q.push(a); 
			}
		}
	}
	return -1;
}
int main(){
	char ss[8];
	string end1;
	for(int i=0;i<8;i++){
		cin>>ss[i];
	}
	end1=ss;
	if(end1==star){
		printf("0\n");
		return 0;
	}
	int sum=bfs(end1);
	cout<<sum<<endl<<ans[end1];
	return 0;
}
2024/11/6 15:46
加载中...