zoukankan      html  css  js  c++  java
  • noi.openjudge——2971 抓住那头牛

    http://noi.openjudge.cn/ch0205/2971/
    总时间限制: 
    2000ms
     
    内存限制: 
    65536kB
    描述

    农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式:

    1、从X移动到X-1或X+1,每次移动花费一分钟
    2、从X移动到2*X,每次移动花费一分钟
     
    假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?
    输入
    两个整数,N和K
    输出
    一个整数,农夫抓到牛所要花费的最小分钟数
    样例输入
    5 17
    样例输出
    4


    BFS
     1 #include <iostream>
     2 
     3 #define maxn 100000
     4 
     5 using namespace std;
     6 
     7 int s,t,head,tail;
     8 
     9 bool vis[maxn+5];
    10 
    11 struct node
    12 {
    13     int now,val;
    14 }que[maxn+5];
    15 
    16 int main()
    17 {
    18     cin>>s>>t;
    19     que[tail].now=s;
    20     que[tail++].val=0;
    21     vis[s]=1;
    22     while(head<tail)
    23     {
    24         int now=que[head].now,val=que[head].val;
    25         if(now==t)
    26         {
    27             cout<<val;
    28             return 0;
    29         }
    30         if(!vis[now*2]&&now*2<=maxn&&now)
    31         {
    32             que[tail].now=now*2;
    33             que[tail++].val=val+1;
    34             vis[now*2]=1;
    35         }
    36         if(!vis[now+1]&&now+1<=maxn&&now<t)
    37         {
    38             que[tail].now=now+1;
    39              que[tail++].val=val+1;
    40              vis[now+1]=1;
    41              
    42         }
    43         if(!vis[now-1]&&now>0)
    44         {
    45             que[tail].now=now-1;
    46              que[tail++].val=val+1;
    47              vis[now-1]=1;
    48         }
    49         head++;
    50     }
    51     return 0;
    52 }
    无限ER
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstdlib>
     4 
     5 using namespace std;
     6 
     7 int n,k;
     8 int b[100005];
     9 
    10 struct sop
    11 {
    12     int sum;
    13     int step; 
    14 }queue[100005];
    15 
    16 void bfs(int n,int k)
    17 {
    18     int head=0;
    19     int tail=1;
    20     queue[tail].sum=n;
    21     queue[tail].step=0;
    22     b[n]=1;
    23     while(head<tail)
    24     {
    25         head++;
    26         if(queue[head].sum==k)
    27         {
    28             cout<<queue[head].step;
    29             return;
    30         }
    31         if(!b[queue[head].sum*2]&&(queue[head].sum*2<=100000)&&(queue[head].sum!=0))
    32         {
    33             tail++;
    34             queue[tail].sum=queue[head].sum*2;
    35             b[queue[head].sum*2]=1;
    36             queue[tail].step=queue[head].step+1;
    37         } 
    38         if(!b[queue[head].sum+1]&&(queue[head].sum+1<=100000)&&(queue[head].sum+1<=k))
    39         {
    40             tail++;
    41             queue[tail].sum=queue[head].sum+1;
    42             b[queue[head].sum+1]=1;
    43             queue[tail].step=queue[head].step+1;
    44         } 
    45         if(!b[queue[head].sum-1]&&(queue[head].sum-1>=0))
    46         {
    47             tail++;
    48             queue[tail].sum=queue[head].sum-1;
    49             b[queue[head].sum-1]=1;
    50             queue[tail].step=queue[head].step+1;
    51         }
    52     } 
    53     return ; 
    54 }
    55 
    56 int main()
    57 {
    58     cin>>n>>k;
    59     
    60     bfs(n,k);
    61     return 0; 
    62 }
    AC题解
    ——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。
  • 相关阅读:
    Mysql主从复制、半同步复制、并行复制
    LVS实现(VS/DR)负载均衡和Keepalived高可用
    Linux系统的高级网络配置(bond、team、网桥)
    Linux系统的日志管理、时间同步、延迟命令at
    Linux系统的内核编译
    Linux系统的vsftpd服务配置
    Linux系统下的软件管理(rpm)、搭建第三方软件库、yum的黑名单
    【笨嘴拙舌WINDOWS】伟大的变革
    程序猿,写的是什么?
    Android-Thread线程的状态
  • 原文地址:https://www.cnblogs.com/Shy-key/p/6683713.html
Copyright © 2011-2022 走看看