$ (0<x,y \le 10^5)$
by KidzzZip @ 2023-08-23 14:34:52
那怎么改?
by I_am_a_boy @ 2023-08-23 14:36:26
1.
```
if(a==b)
{
cout<<0;
return 0;
}
```
是错误的,应为
```
if(a==b)
{
cout<<0;
break;
}
```
并且需要一个标志位以防同时输出0与vis[b]
2.
```if(p+1<=N&&vis[p+1]==vis[0])```
应为 ```if(p+1<=100000&&vis[p+1]==0)```
3.
```if(p-1>0&&vis[p-1]==vis[0])```
应为```if(p-1>0&&vis[p-1]==0)```
4.
```if(vis[p*2]==0||2*p<=vis[0])```
应为```if(vis[p*2]==0&&2*p<=100000)```
5. 每个循环刚开始需```memset(v,0,sizeof(v))```
....
错太多了,懒得数了
by so_find_skind @ 2023-08-23 14:37:10
```cpp
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+1;
long long n,a,b;
long long vis[N];
int main()
{
cin>>n;
while(n--)
{
memset(vis,0,sizeof vis);
cin>>a>>b;
queue<long long>q;
vis[a]=0;
q.push(a);
while(!q.empty())
{
if(a==b)
{
cout<<0;
break;
}
long long p=q.front();
q.pop();
if(p==b)break;
if(p+1<=100000&&vis[p+1]==0)
{
q.push(p+1);
vis[p+1]=vis[p]+1;
}
if(p-1>0&&vis[p-1]==0)
{
q.push(p-1);
vis[p-1]=vis[p]+1;
}
if(vis[p*2]==0&&2*p<=100000)
{
q.push(2*p);
vis[2*p]=vis[p]+1;
}
}
cout<<vis[b];
}
}
by I_am_a_boy @ 2023-08-23 15:01:13
现在全wa
by I_am_a_boy @ 2023-08-23 15:01:49
@[I_am_a_boy](/user/977653) 弱弱说一句输出要换行
by _yuk_i @ 2023-08-27 20:31:45
@[_Ning_](/user/516691) @[zhezhikongdanruxue](/user/756179)
@[KidzzZip](/user/311350)
谢谢各大佬,全部已关
by I_am_a_boy @ 2023-08-27 20:38:49
@[_Ning_](/user/516691) 那你是哪里错了
by I_am_a_boy @ 2023-08-27 20:57:26
@[I_am_a_boy](/user/977653) 现在已经ac了 输出的的判断里终止写的是break 改成return就好了
by _yuk_i @ 2023-08-27 21:46:27
嗯
by I_am_a_boy @ 2023-08-28 20:48:52