1 条题解

  • 4
    @ 2023-10-8 12:41:11

    不是说简单题吗,咋还冒出提高组得了。 AC代码

    #include <bits/stdc++.h>
    using namespace std;
    int n,k;
    struct T{
    	int x;
    	int step;
    }q[100001];
    int vis[100001];
    void bfs(int sx,int ex){
    	int head=1;
    	int tail=1;
    	q[tail].x=sx;
    	q[tail].step=0;
    	tail++;
    	vis[sx]=1;
    	while(head<tail){
    		int x0=q[head].x;
    		int step=q[head].step;
    		if (x0==ex){
    			cout<<step<<endl;
    			return;
    		}
    		for (int i=1;i<=3;i++){
    			int nx;
    			if (i==1){
    				nx=x0+1;
    			}
    			if (i==2){
    				nx=x0-1;
    			}
    			if (i==3){
    				nx=x0*2;
    			}
    			if (nx>=0&&nx<=100000&&!vis[nx]){
    				q[tail].x=nx;
    				q[tail].step=step+1; 
    				tail++;
    				vis[nx]=1;
    			}
    		}
    		head++;
    	}
    }
    int main(){
    	cin>>n>>k;
    	memset(vis,0,sizeof(vis));
    	bfs(n,k);
    	return 0;
    }
    

    优化

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn=1000001;
    int step=0;
    void bfs(int sx,int ex){
    	set<int>q1;
    	set<int>q2;
    	set<int>visted;
    	set<int>tmp;
    	q1.insert(sx);
    	q2.insert(ex);
    	while(q1.size()&&q2.size()){
    		tmp.clear();
    		for (set<int>::iterator it=q1.begin();it!=q1.end();it++){
    			int cur=*it;
    			if (q2.find(cur)!=q2.end()){
    				cout<<step<<endl;
    				return;
    			}
    			visted.insert(cur);
    			for (int i=1;i<=3;i++){
    				int nc=cur;
    				if (i==1){
    					nc++;
    				}
    				if (i==2){
    					nc--;
    				}
    				if (i==3){
    					if (step%2!=0){
    						if (nc%2==0){
    							nc/=2;
    						}
    						else{
    							continue;
    						}
    					}
    					else{
    						nc*=2;
    					}
    				}
    				if (nc>=0&&nc<=100000&&visted.find(nc)==visted.end()){
    					tmp.insert(nc);
    				}
    			}
    		}
    		step++;
    		q1=q2;
    		q2=tmp;
    	}
    }
    int main(){
    	int n,k;
    	cin>>n>>k;
    	bfs(n,k);
    	return 0;
    }
    
    • 1

    信息

    ID
    2051
    时间
    1000ms
    内存
    128MiB
    难度
    4
    标签
    (无)
    递交数
    161
    已通过
    77
    上传者