洛谷——P1518 两只塔姆沃斯牛 The Tamworth Two
https://www.luogu.org/problem/show?pid=1518
题目背景
题目描述
两只牛逃跑到了森林里。农夫John开始用他的专家技术追捕这两头牛。你的任务是模拟他们的行为(牛和John)。
追击在10x10的平面网格内进行。一个格子可以是:
一个障碍物, 两头牛(它们总在一起), 或者 农民John. 两头牛和农民John可以在同一个格子内(当他们相遇时),但是他们都不能进入有障碍的格子。
一个格子可以是:
. 空地
- 障碍物
C 两头牛
F 农民John
这里有一个地图的例子:
*...*.....
......*...
...*...*..
..........
...*.F....
*.....*...
...*......
..C......*
...*.*....
.*.*......
牛在地图里以固定的方式游荡。每分钟,它们可以向前移动或是转弯。如果前方无障碍(地图边沿也是障碍),它们会按照原来的方向前进一步。否则它们会用这一分钟顺时针转90度。 同时,它们不会离开地图。
农民John深知牛的移动方法,他也这么移动。
每次(每分钟)农民John和两头牛的移动是同时的。如果他们在移动的时候穿过对方,但是没有在同一格相遇,我们不认为他们相遇了。当他们在某分钟末在某格子相遇,那么追捕结束。
读入十行表示农夫John,两头牛和所有障碍的位置的地图。每行都只包含10个字符,表示的含义和上面所说的相同,你可以确定地图中只有一个'F'和一个'C'.'F'和'C'一开始不会处于同一个格子中。
计算农夫John需要多少分钟来抓住他的牛,假设牛和农夫John一开始的行动方向都是正北(即上)。 如果John和牛永远不会相遇,输出0。
输入输出格式
输入格式:
每行10个字符,表示如上文描述的地图。
输出格式:
输出一个数字,表示John需要多少时间才能抓住牛们。如果John无法抓住牛,则输出0。
输入输出样例
*...*.....
......*...
...*...*..
..........
...*.F....
*.....*...
...*......
..C......*
...*.*....
.*.*......
49
说明
翻译来自NOCOW
USACO 2.4
getchar --有毒~~RE WA MLE 快全了~~~
#include <algorithm>
#include <iostream>
#include <cstdio> using namespace std; char map[][],d1,d2;
int fx[]= {-,,,};
int fy[]= {,,,-};
struct Node
{
int x,y;
}cow,John; int main()
{
for(int i=;i<=;i++)
for(int j=;j<=;j++)
{
cin>>map[i][j];
if(map[i][j]=='C') cow.x=i,cow.y=j;
if(map[i][j]=='F') John.x=i,John.y=j;
}
for(int i=;i<=;i++)
map[i][]=map[][i]=map[][i]=map[i][]='*';
int ans=;
while(cow.x!=John.x||cow.y!=John.y)
{
ans++;
if(map[cow.x+fx[d1]][cow.y+fy[d1]]=='*')
d1=(d1+)%;
else cow.x+=fx[d1],cow.y+=fy[d1];
if(map[John.x+fx[d2]][John.y+fy[d2]]=='*')
d2=(d2+)%;
else John.x+=fx[d2],John.y+=fy[d2];
if(ans>1e7)
{
puts("");
return ;
}
}
printf("%d",ans);
}
模拟
#include <algorithm>
#include <iostream>
#include <cstdio> using namespace std; int ans,d1,d2;
char map[][];
int fx[]={-,,,};
int fy[]={,,,-};
struct Node
{
int x,y;
}cow,John; void move(Node &it,int &d)
{
it.x+=fx[d];it.y+=fy[d];
if(map[it.x][it.y]=='*')
{
it.x-=fx[d];
it.y-=fy[d];
d=(d+)%;
}
} void Catch()
{
if(cow.x==John.x&&cow.y==John.y||ans>) return ;//40000 改成1e7会MLE。。。
ans++;
move(cow,d1);
move(John,d2);
Catch();
} int main()
{
for(int i=;i<=;i++)
for(int j=;j<=;j++)
{
cin>>map[i][j];
if(map[i][j]=='C') cow.x=i,cow.y=j;
if(map[i][j]=='F') John.x=i,John.y=j;
}
for(int i=;i<=;i++)
map[i][]=map[][i]=map[][i]=map[i][]='*';
Catch();
if(ans>) ans=;
printf("%d\n",ans);
return ;
}
搜索
洛谷——P1518 两只塔姆沃斯牛 The Tamworth Two的更多相关文章
- 洛谷P1518 两只塔姆沃斯牛 The Tamworth Two
P1518 两只塔姆沃斯牛 The Tamworth Two 109通过 184提交 题目提供者该用户不存在 标签USACO 难度普及+/提高 提交 讨论 题解 最新讨论 求数据 题目背景 题目描 ...
- 洛谷 P1518 两只塔姆沃斯牛 The Tamworth Two
P1518 两只塔姆沃斯牛 The Tamworth Two 题目背景 题目描述 两只牛逃跑到了森林里.农夫John开始用他的专家技术追捕这两头牛.你的任务是模拟他们的行为(牛和John). 追击在1 ...
- 洛谷 P1518 两只塔姆沃斯牛
P1518 两只塔姆沃斯牛 The Tamworth Two 简单的模拟题,代码量不大. 他们走的路线取决于障碍物,可以把边界也看成障碍物,遇到就转,枚举次,因为100 * 100 * 4,只有4个可 ...
- luogu P1518 两只塔姆沃斯牛 The Tamworth Two
luogu P1518 两只塔姆沃斯牛 The Tamworth Two 题目描述 两只牛逃跑到了森林里.农夫John开始用他的专家技术追捕这两头牛.你的任务是模拟他们的行为(牛和John). 追击在 ...
- P1518 两只塔姆沃斯牛 The Tamworth Two(简单的搜索题)
题目描述 两只牛逃跑到了森林里.农夫John开始用他的专家技术追捕这两头牛.你的任务是模拟他们的行为(牛和John). 追击在10x10的平面网格内进行.一个格子可以是: 一个障碍物, 两头牛(它们总 ...
- P1518 [USACO2.4]两只塔姆沃斯牛 The Tamworth Two
// Problem: P1518 [USACO2.4]两只塔姆沃斯牛 The Tamworth Two // Contest: Luogu // URL: https://www.luogu.com ...
- 【USACO 2.4.1】两只塔姆沃斯牛
[题目描述] 两只牛逃跑到了森林里.农夫John开始用他的专家技术追捕这两头牛.你的任务是模拟他们的行为(牛和John). 追击在10x10的平面网格内进行.一个格子可以是: 一个障碍物, 两头牛(它 ...
- (bzoj1337 || 洛谷P1742 最小圆覆盖 )|| (bzoj2823 || 洛谷P2533 [AHOI2012]信号塔)
bzoj1337 洛谷P1742 用随机增量法.讲解:https://blog.csdn.net/jokerwyt/article/details/79221345 设点集A的最小覆盖圆为g(A) 可 ...
- 洛谷 P3904 三只小猪
题目背景 你听说过三只小猪的故事吗?这是一个经典的故事.很久很久以前,有三只小猪.第一只小猪用稻草建的房子,第二个小猪用木棍建的房子,第三个小猪则使用砖做为材料.一只大灰狼想吃掉它们并吹倒了稻草和木棍 ...
随机推荐
- NPOI操作Excel 004:写入空Excel(添加保存提示框)
前文说道写入excel的样例,当中保存Excle后须要添加提示框.让用户自己选择保存路径,做改动例如以下. 引用的dll等前面已经说过了, 直接看代码: protected void Btn_Writ ...
- 使用isolation forest进行dns网络流量异常检测
代码如下,测试发现,是否对输入数据进行归一化/标准化对于结果没有影响: import numpy as np from sklearn.ensemble import IsolationForest ...
- springBoot 打war包 程序包com.sun.istack.internal不存在的问题
使用的是 idea - Lifecycle-package 的方式打包(maven) 确认 <packaging>war</packaging> 修改启动类: (原启动类) ...
- Android--Fragment与Activity通信
package com.example.testfragment; import com.example.testfragment.MainFargment.BackString; import an ...
- RelativeLayout中的baseline
比如,加入两个相邻的TextView,给第二个TextView一个大一点的padding(比如20dp),如果加了layout_alignBaseline到第二个TextView中的话, TextVi ...
- 自动关闭Messbox
/// <summary> /// 自动关闭Messbox /// </summary> public class MessageBoxAutoClose { System.T ...
- 51Nod 蜥蜴和地下室(搜索)
哈利喜欢玩角色扮演的电脑游戏<蜥蜴和地下室>.此时,他正在扮演一个魔术师.在最后一关,他必须和一排的弓箭手战斗.他唯一能消灭他们的办法是一个火球咒语.如果哈利用他的火球咒语攻击第i个弓箭手 ...
- iOS——集成支付宝 private key is NULL
问题描述:将生成的私钥,写进官方demo,还是一直报错:rsa_private read error : private key is NULL 解决方案:需要将RSA私钥转换成PKCS8格式
- Linux下的压缩与解压缩
1 .gz 1)压缩 root@xiaohuang-virtual-machine:/home/xiaohuang/桌面/hellow/hellow# gzip 2.txt 3.txt root@xi ...
- 内存,寄存器和cache的区别与联系
1. 寄存器是中央处理器内的组成部份.寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令.数据和位址.在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC).在中央处理器的 ...