//map 一对多映射,基于关键字快速查找,不允许重复值
//queue 队列 先进先出
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<map>
using namespace std;
struct node{
int x,step;
};
int main(){
int n,m;
while(scanf("%d%d",&n,&m) != EOF ){
queue<node>qu;
map<int,int>mp;
mp.clear();
node ad,tmp;
ad.x=n, ad.step=0;
mp[ad.x]=1;
qu.push(ad);
while(!qu.empty()){
tmp=qu.front();
qu.pop();
if(tmp.x==m) break;
ad.x=tmp.x+1, ad.step=tmp.step+1;
if(ad.x>=0 && ad.x<=200000 && !mp[ad.x]){
mp[ad.x]=1;
qu.push(ad);
}
ad.x=tmp.x-1, ad.step=tmp.step+1;
if(ad.x>=0 && ad.x<=200000 && !mp[ad.x]){
mp[ad.x]=1;
qu.push(ad);
}
ad.x=tmp.x*2, ad.step=tmp.step+1;
if(ad.x>=0 && ad.x<=200000 && !mp[ad.x]){
mp[ad.x]=1;
qu.push(ad);
}
}
printf("%d\n",tmp.step);
}
system("pause");
}
hdu_1412
//set 快速查找 不允许重复值
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<set>
using namespace std;
int main()
{
set<int>st;
set<int>::iterator it;
int n,m,i,j;
int a,b,f;
while(scanf("%d%d",&n,&m)!=EOF)
{
st.clear();
for(i=0;i<n;i++)
{
scanf("%d",&a);
st.insert(a);
}
for(j=0;j<m;j++)
{
scanf("%d",&b);
st.insert(b);
}
f=0;
for(it=st.begin();it!=st.end();it++)
{
if(f)printf(" ");
f=1;
printf("%d",*it);
}
printf("\n");
}
}