P1518 [USACO2.4] 两只塔姆沃斯牛 The Tamworth Two题解

题目

两只牛逃跑到了森林里。Farmer John开始用他的专家技术追捕这两头牛。你的任务是模拟他们的行为(牛和John)。

追击在10×10的平面网格内进行。一个格子可以是:一个障碍物,两头牛(它们总在一起),或者 Farmer John。两头牛和Farmer John可以在同一个格子内(当他们相遇时),但是他们都不能进入有障碍的格子。

一个格子可以是:

  • . 空地;
  • * 障碍物;
  • C 两头牛;
  • F Farmer John。

这里有一个地图的例子:

*...*.....
......*...
...*...*..
..........
...*.F....
*.....*...
...*......
..C......*
...*.*....
.*.*......

牛在地图里以固定的方式游荡。每分钟,它们可以向前移动或是转弯。如果前方无障碍(地图边沿也是障碍),它们会按照原来的方向前进一步。否则它们会用这一分钟顺时针转90度。 同时,它们不会离开地图。

Farmer John深知牛的移动方法,他也这么移动。

每次(每分钟)Farmer John和两头牛的移动是同时的。如果他们在移动的时候穿过对方,但是没有在同一格相遇,我们不认为他们相遇了。当他们在某分钟末在某格子相遇,那么追捕结束。

读入十行表示地图。每行都只包含10个字符,表示的含义和上面所说的相同。保证地图中只有一个 F 和一个 CF 和 C 一开始不会处于同一个格子中。

计算Farmer John需要多少分钟来抓住他的牛,假设牛和Farmer John一开始的行动方向都是正北(即上)。 如果John和牛永远不会相遇,输出 0。

输入输出格式

输入格式

输入共十行,每行 10 个字符,表示如上文描述的地图。

输出格式

输出一个数字,表示John需要多少时间才能抓住牛们。如果John无法抓住牛,则输出0。

输入输出样例

输入样例

*...*.....
......*...
...*...*..
..........
...*.F....
*.....*...
...*......
..C......*
...*.*....
.*.*......

输出样例

49

代码

#include<iostream> 
using namespace std;
char m[12][12];//初始化地图 
int f[3],c[3],ans,tdz;//农夫,牛,分钟数,专属值(记录走过的位置) 
bool zt[1000005];//存放专属值的数组 
void move(int x,int y,int mi,int h){//转向移动函数,x,y代表横纵坐标,mi表示目前的方向,h表示是农夫还是牛 if(mi==0){ //mi可以取0,1,2,3分别代表前,右,后,左 if(m[x-1][y]=='*'){//如果前面有障碍物 if(h==0){//如果是农夫 f[0]=1;}else{c[0]=1;}} else{if(h==0){f[1]--;}else{c[1]--;}}}else if(mi==1){if(m[x][y+1]=='*'){if(h==0){f[0]=2;}else{c[0]=2;}}  else{if(h==0){f[2]++;}else{c[2]++;}	 }}else if(mi==2){if(m[x+1][y]=='*'){if(h==0){f[0]=3;}else{c[0]=3;	}}else{if(h==0){f[1]++;}else{c[1]++;}}}else{if(m[x][y-1]=='*'){if(h==0){f[0]=0;}else{c[0]=0;}}  else{if(h==0){f[2]--;}else{c[2]--;}}}
}
int main(){for(int i=0;i<=11;i++){//边界也设置为障碍 m[i][0]='*';m[i][11]='*';}for(int i=1;i<=10;i++){//边界也设置为障碍 m[0][i]='*';m[11][i]='*';}for(int i=1;i<=10;i++){for(int j=1;j<=10;j++){cin>>m[i][j];//输入 if(m[i][j]=='F'){//记录下初始农夫的坐标 f[1]=i;f[2]=j;}if(m[i][j]=='C'){//记录下初始牛的坐标 c[1]=i;c[2]=j;}}}while(f[1]!=c[1]||f[2]!=c[2]){//当两者没有相遇时 tdz=f[1]+f[2]*10+c[1]*100+c[2]*1000+f[0]*10000+c[0]*100000;//生成专属值 if(zt[tdz]){//如果又一次回到了原位置说明陷入了循环,不会再相遇 cout<<0<<endl;return 0;}zt[tdz]=1;//记录去过的位置 move(f[1],f[2],f[0],0);//农夫移动 move(c[1],c[2],c[0],1);//牛移动 ans++;//分钟数+ }cout<<ans<<endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/642313.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20.有效的括号(附带源码)

目录 一、思路 二、源码 一、思路 左括号入栈&#xff0c;遇到右括号则出栈进行匹配。 1、如果不匹配&#xff0c;false 2、如果匹配完&#xff0c;栈不空&#xff0c;false 3、如果栈空&#xff0c;但是还有右括号&#xff0c;false 二、源码 // 支持动态增长的栈 typed…

常用界面设计组件 —— 数字输入和显示组件

2.3 数字输入和显示组件2.3.1 QSpinBox 与 QDoubleSpinBox2.3.2其它数值输入和显示组件 2.3 数字输入和显示组件 2.3.1 QSpinBox 与 QDoubleSpinBox QSpinBox用于整数的显示和输入&#xff0c;一般显示十进制 数&#xff0c;也可以显示二进制、十六进制数&#xff0c;而且可以…

GEE错误——Image (Error) Image.select: Pattern ‘SR_B1‘ did not match any bands.

错误 我花了大量时间试图解决这个问题,但我找不到解决办法。开发人员和小组成员,我需要你们的帮助,这是我学习项目的一部分。 原始代码链接: https://code.earthengine.google.com/ccd8eb582aa520b970f4dee2d5118def Image (Error) Image.select: Pattern SR_B1 did …

02 MyBatisPlus核心功能之基于Mapper接口/Service接口实现CRUD+分页查询

项目结构&#xff1a; 1.1 Insert方法 // 插入一条记录 // T 就是要插入的实体对象 // 默认主键生成策略为雪花算法&#xff08;后面讲解&#xff09; //返回值是影响条数 int insert(T entity);1.2 Delete方法 // 根据 entity 条件&#xff0c;删除记录 int delete(Param(…

Python学习03—Python语法元素分析

一、程序的格式框架 1.1 代码高亮 代码高亮是Python编程环境根据代码不同含义&#xff0c;给予不同色彩标注的一种色彩辅组体系。在不同的代码编程环境中&#xff0c;代码高亮的表现形式各有不同。 1.2 缩进 缩进是一行代码开始前的空白区域&#xff0c;它用来表达程序的格式…

不同知识表示方法与知识图谱

目录 前言1 一阶谓词逻辑1.1 简介1.2 优势1.3 局限性 2 产生式规则2.1 简介2.2 优势2.3 局限性 3 框架系统3.1 简介3.2 优势3.3 局限性 4 描述逻辑4.1 简介4.2 优势4.3 局限性 5 语义网络5.1 简介5.2 优势5.3 局限性 结语 前言 知识表示是人工智能领域中至关重要的一环&#x…

vue3前端开发,生命周期函数的基础练习

vue3前端开发,生命周期函数的基础练习&#xff01; 下面先给大家看一个图片&#xff0c;帮助大家了解&#xff0c;vue3的生命周期函数&#xff0c;和旧版本vue2的生命周期函数&#xff0c;有什么变化。 如图所示&#xff0c;vue3里面&#xff0c;把前面2个函数&#xff0c;混在…

再不学Python就晚了!——2023年度总结:市场需求最大的8种编程语言!

众所周知&#xff0c;编程语言的种类实在是太多了。直到现在&#xff0c;经常还会看到关于编程语言选择和学习的讨论。 虽说编程语言有好几百种&#xff0c;但实际项目使用和就业要求的主流编程语言却没有那么多。 大家可能也会好奇&#xff1a;现如今就业市场上到底什么编程…

【C++】Qt:QCustomPlot图表绘制库配置与示例

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍QCustomPlot图表绘制库配置与示例。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次…

【网站项目】新冠疫情隔离人员信息管理系统(有源码)

🙊作者简介:多年一线开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板,帮助书写开题报告。作者完整代码目录供你选择: 《Springboot网站项目…

kingbase常用SQL总结之锁等待信息

锁信息与等待事件 分析kingbase&#xff08;pg&#xff09;数据库锁等待、死锁时需要我们准确的定位等锁或者死锁相关的事务。关于获取锁等待信息或者死锁信息已有经典的SQL可以直接使用&#xff0c;但是需要我们先了解sql语句获取的每个字段的意义。 获取到锁等待事务不能完全…

C++之函数名后面的const

在 C 中&#xff0c;函数名后面加上const 关键字表示该函数不会修改对象的成员变量(除非成员变量是mutable的)。这是一种良好的编程习惯&#xff0c;可以提高代码的安全性和可读性。 在这个例子中&#xff0c;internalWinId() 和 effectiveWinId() 都被声明为 const,这意味着它…

【Linux与windows的文件互相传输】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 关于 rzsz 注意事项 查看软件包 使用命令 下载到本地&#xff08;使用sz的命令&#xff09; 本地文件上传到Linux中&#xff08;使用rz命令&#xff09; 方法一…

【立创EDA-PCB设计基础】3.网络表概念解读+板框绘制

前言&#xff1a;本文对网络表概念解读板框绘制&#xff08;确定PCB板子轮廓&#xff09; 网络表概念解读 在本专栏的上一篇文章【嘉立创EDA-PCB设计指南】2&#xff0c;将设计的原理图转为了PCB&#xff0c;在PCB界面下出现了所有的封装&#xff0c;以及所有的飞线属性&…

Minio 判断对象是否存在

引 Minio数据模型 中描述了 MinIO 中什么是桶&#xff0c;什么是对象&#xff0c;也给出了操作桶和操作对象的API。 在 MinIO 中&#xff0c; 对象 中间前缀 对象名称 。如何判定对象是否存在呢&#xff1f; 分析 在 MinIO 中并没有提供判断对象是否存在的操作&#xff…

React16源码: React中的updateHostComponent的源码实现

updateHostComponent 1 &#xff09;概述 在 completeWork 阶段的 HostComponent 处理&#xff0c;继续前文所述在更新的逻辑里面&#xff0c;调用了 updateHostComponent进行前后props对应的dom的attributes变化的对比情况这个方法也是根据不同环境来定义的&#xff0c;我们这…

Python基础之文件操作(I/O)

和其他编程语言一样&#xff0c;Python 也具有操作文件&#xff08;I/O&#xff09;的能力&#xff0c;比如打开文件、读取和追加数据、插入和删除数据、关闭文件、删除文件等。合理应用python提供的文件操作基本函数&#xff0c;可大大提高自动化实现的效率与框架代码的稳定性…

C++ | 六、栈 Stack、队列 Queue

栈的基础知识 栈&#xff08;stack&#xff09;是一种数据结构&#xff0c;在C中属于STL&#xff08;标准库&#xff09;特点&#xff1a;先进后出 栈的使用&#xff1a; 一、引入头文件<stack>二、创建栈变量&#xff08;类似容器、集合的创建方式&#xff09;&#xf…

C++实现函数重载的原理

一、函数重载的概念 C中允许存在同名函数&#xff0c;但要求函数参数的类型、个数不同&#xff0c;这些同名函数就称为函数的重载。 void func(int a, int b) {cout << "func(int a, int b)" << endl; }void func(double a, double b) {cout << …

【Linux】Linux编译器-gcc/g++使用

1. 背景知识 预处理&#xff08;进行宏替换) 编译&#xff08;生成汇编) 汇编&#xff08;生成机器可识别代码&#xff09; 连接&#xff08;生成可执行文件或库文件) 2. gcc如何完成 格式 gcc [选项] 要编译的文件 [选项] [目标文件] 预处理(进行宏替换) 预处理功能主要包括…