为什么全RE!

P1588 [USACO07OPEN] Catch That Cow S

$ (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


|