【NOI】2971 抓住那头牛
2016-12-28 16:29
323 查看
描述
农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式:
1、从X移动到X-1或X+1,每次移动花费一分钟
2、从X移动到2*X,每次移动花费一分钟
假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?
输入
两个整数,N和K
输出
一个整数,农夫抓到牛所要花费的最小分钟数
-
其实就是裸BFS
手残把+1写成*1结果wa了一片;)
农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式:
1、从X移动到X-1或X+1,每次移动花费一分钟
2、从X移动到2*X,每次移动花费一分钟
假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?
输入
两个整数,N和K
输出
一个整数,农夫抓到牛所要花费的最小分钟数
-
其实就是裸BFS
手残把+1写成*1结果wa了一片;)
#include<cstdio> #include<cstring> using namespace std; int h,l,n[10000003],k,f[10000003],t[10000003],s=100000; bool q[1000003]; int dd(int a,int b) { if(a==1) return b-1; else if(a==2) return b+1; return b*2; } int main() { h=l=1;t[h]=0; scanf("%d%d",&n[h],&k); q[n[h]]=1; if(n[h]>=k) {printf("%d",n[h]-k);return 0;} do { for(int i=1;i<=3;++i) { int tt=dd(i,n[h]); if(!q[tt]&&tt>=0&&tt<k+s) { q[tt]=1; ++l; f[l]=i; n[l]=tt; t[l]=t[h]+1; if(n[l]==k) { if(s<t[l]) printf("%d",s); else printf("%d",t[l]); return 0; } if(n[l]>k&&n[l]-k<s) s=t[l]+n[l]-k; } } ++h; } while(true); return 0; }
相关文章推荐
- OpenJudge noi 2971抓住那头牛(POJ 3278)
- NOI OpenJudge 2971:抓住那头牛 BFS
- openjudge-noi-2.5-2971:抓住那头牛
- noi 2971 抓住那头牛
- noi.openjudge——2971 抓住那头牛
- OpenJudge 2.5-2971 Catch That Cow(抓住那头牛)
- openjudge 2971:抓住那头牛 解题报告
- OpenJudge 2971 抓住那头牛
- 2971:抓住那头牛题解
- 2971:抓住那头牛
- 2971:抓住那头牛
- noi 抓住那头牛
- 2971:抓住那头牛
- 倒计时三天——抓住那头牛
- 广度优先搜索-抓住那头牛(算法基础 第8周)
- POJ3278==抓住那头牛
- 算法练习题之抓住那头牛
- POJ3278 抓住那头牛
- 抓住那头牛
- 广度优先搜索--抓住那头牛(poj 3278)