求助,不知道哪里错了
查看原帖
求助,不知道哪里错了
518124
yiyi049楼主2022/2/4 17:01

MLE+样例没过 记录

#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<string.h>
#include<map>
using namespace std;
const int L=2e7;
string s,endd;
int n;
struct node{
	string now;
	int pos,bs,last,change;
}dl[L];
int len;
map<string,bool> pc;
int cnt;
void print(int i){
	if(dl[i].last)print(dl[i].last);
	if(dl[i].change){
		printf("%d ",dl[i].change+1);
		cnt++;
		if(cnt==20)printf("\n");
	}
}
void add(int a,int b,string news,int bs,int ls){
	swap(news[a],news[b]);
	if(pc[news])return;
	else {
		pc[news]=1;
		len++;
		dl[len].bs =bs+1;
		dl[len].now =news;
		dl[len].pos=b;
		dl[len].last =ls;
		dl[len].change =b;
		//if
		if(dl[len].now==endd){
		
	//	cout<<dl[len].bs<<"\n";
		print(len);exit(0);
		}
		
	}
}
int main(){
	cin>>n;
	len++;
	string a(n,'W'),b(n,'B');
	endd=b+" "+a;
	dl[len].now=a+" "+b;
	dl[len].pos=n;
	dl[len].last =0;
	dl[len].bs =0;
	pc[dl[len].now]=1;
	int siz=2*n;
	//node u=dl[1];
	//cout<<u.now[u.pos-2]<<" "<<u.now[u.pos-1];
	for(int i=1;i<=len;i++){
		node u=dl[i];
		if(u.pos>=2&&u.now[u.pos-2]!=u.now[u.pos-1])add(u.pos,u.pos-2,u.now,u.bs,i);
		if(u.pos>=1)add(u.pos,u.pos-1,u.now,u.bs,i);
		if(u.pos<siz)add(u.pos,u.pos+1,u.now,u.bs,i);
		if(u.pos<siz-1&&u.now[u.pos+2]!=u.now[u.pos+1])add(u.pos,u.pos+2,u.now,u.bs,i);
	}

}
2022/2/4 17:01
加载中...