首页 > 其他分享 >POJ 3278 Catch That Cow

POJ 3278 Catch That Cow

时间:2024-07-09 12:21:23浏览次数:14  
标签:Cow int dd vis POJ Catch include true first

题目链接:POJ 3278 【atch That Cow】



思路

       将起点放入队列,然后一次取出队列中的元素,对其进行左右移动和乘2的移动,并判断移动后的位置是否合法,合法则放入队列中继续操作。每次取出队列中的元素后,通过假设剩下的步骤全部是左右移动一格来更新结果。


代码

#include <iostream>
#include <stdlib.h>
#include <queue>
#include <cmath>
using namespace std;
#define ll long long
const int N = 1e5 + 10;

int n, k, dir[2] = {1, -1};
bool vis[N];

bool check(int x) {
  if (x >= 0 && x <= 100000 && vis[x] == false) 
    return true;
  else
    return false;
}

int bfs() {
  int res = 1e9;

  queue<pair<int, int> > q;
  q.push({n, 0});
  vis[n] = true;

  while (!q.empty()) {
    // 取出栈顶,并操作
    pair<int, int> d = q.front();
    q.pop();

    // 更新结果
    res = min(res, abs(k - d.first) + d.second);

    // 左右移动
    for (int i = 0; i < 2; i++) {
      pair<int, int> dd = d;
      dd.first += dir[i];
      dd.second++;
      // 当前位置未被访问且在范围内时,将当前位置加入队列中,并标记当前位置已经被使用过
      if (check(dd.first) == true) {
        q.push(dd);
        vis[dd.first] = true;
      }
    }

    // 乘2移动
    pair<int, int> dd = d;
    dd.first *= 2;
    dd.second++;
    if (check(dd.first) == true) {
      q.push(dd);
      vis[dd.first] = true;
    }
  }

  return res;
}

int main() {
  cin >> n >> k;
  
  cout << bfs() << endl;

  return 0;
}

标签:Cow,int,dd,vis,POJ,Catch,include,true,first
From: https://www.cnblogs.com/againss/p/18291527

相关文章

  • P2901 [USACO08MAR] Cow Jogging G (拓扑序+归并排序)
    P2901[USACO08MAR]CowJoggingG拓扑序+归并排序容易看出图是有向无环图,考虑在拓扑序上维护每个点的\(k\)短路。假如遍历到\(u\),有边\((u,v,w)\),\(u\),\(v\)各自有自己的\(k\)短路,我们需要将\(u\)上的\(k\)短路加\(w\)后与\(v\)上排序,然后去前\(k\)小。直接做......
  • C#中的异常捕获 try catch finally
    处理异常提供的四个关键字,try...catch...finally...throwfinally最后,不管异常是否被抛出都会执行,例如打开一个文件,不管是否出现异常都需要关闭,throw:当问题出现的时候程序可以抛出一个异常,使用throw关键字抛出异常,try{执行的代码}catch(ExceptionNamee1){处理异常t......
  • P7411 [USACO21FEB] Comfortable Cows S (搜索)
    P7411[USACO21FEB]ComfortableCowsS搜索容易知道任意时刻的不合法的位置,并且决策只有将空着的位置补起来。每次加入一个点,判断其自身、上下左右是否变得不合法,往下递归即可。复杂度分析,每个点只会不合法一次(修改后就变得合法),所以只会遍历一次,复杂度是\(O(n^2)\)。#inclu......
  • POJ3017 Cut the Sequence
    POJ3017CuttheSequence题目大意给定一个一个长度为\(N\)的序列\(A\),要求把该序列划分成若干段,其中每一段中的数的和不大于\(M\),现在需要使得每一段中数的最大值的和最小,求该最小值。\[0\leqn\leq10^5\\0\leqm\leq10^{11}\\0\leqa_i\leq10^6\]解题思路......
  • P8271 [USACO22OPEN] COW Operations S (思维)
    P8271[USACO22OPEN]COWOperationsS思维题遇到不明白的操作,尝试在纸上模拟操作过程,找到性质。第一种操作目前没有什么特别的,有一个它不会改变字符的奇偶性。重点是第二个。我们容易发现CO->W->OC这样的过程,它实现了相邻位置的互换,这个性质正是冒泡排序的过程,所以字符的排......
  • pycharm创建临时文件scatch file
    JetBrainsPyCharm是一种PythonIDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。此外,该IDE提供了一些高级功能,以用于Django框架下的专业Web开发。有时您可能需要创建临时注释或在项目上下文之外起草一些代码。为此,您可以使用临时文件和临时缓冲区,而不是切......
  • 有趣的Python库——CowSay
    有趣的Python库——CowSay安装:pipinstallcowsay命令式使用:cowsay-cpig-t你好,我是一只猪哦!输出:__________|你好,我是一只猪哦!|==========\\\\,.(_|,......
  • P3056 [USACO12NOV] Clumsy Cows S
    [USACO12NOV]ClumsyCowsS题目描述Bessiethecowistryingtotypeabalancedstringofparenthesesintohernewlaptop,butsheissufficientlyclumsy(duetoherlargehooves)thatshekeepsmis-typingcharacters.Pleasehelpherbycomputingthemi......
  • try catch return语句情况分析
    trycatchreturn语句情况分析trycatch无finally语句写在最后trycatchtrycatch语法是一种对应于异常处理的语句,其中try语句内用于编写有异常存在可能的语句,而catch语句内用于编写捕获到异常的类型以及对异常对象的处理方法,本文主要以java语言为示例来演示trycatc......
  • 程序设计与算法(三)C++:第五章poj代码
    课程:北京大学程序设计与算法(三)   MOOCOJ:OpenJudge019:全面的MyString这个题也是有很多的成员函数,我们来从主函数分析一下:MyStrings1("abcd-"),s2,s3("efgh-"),s4(s1);//无参构造,有参构造,复制可以不写 MyStringSArray[4]={"big","me","about","take"......