P1518 [USACO2.4]两只塔姆沃斯牛 The Tamworth Two
// Problem: P1518 [USACO2.4]两只塔姆沃斯牛 The Tamworth Two
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P1518
// Memory Limit: 125 MB
// Time Limit: 1000 ms
// User: Pannnn
#include <bits/stdc++.h>
using namespace std;
// 获取图信息,保存牛和人的当前位置
// 读入时判断是否为字符F和C,使用单独的坐标存储人和牛的坐标,图中将字符替换为.
void getGraph(char (*graph)[15], int &cowX, int &cowY, int &humX, int &humY) {
for (int i = 1; i <= 10; ++i) {
for (int j = 1; j <= 10; ++j) {
cin >> graph[i][j];
if (graph[i][j] == 'F') {
cowX = i;
cowY = j;
graph[i][j] = '.';
} else if (graph[i][j] == 'C') {
humX = i;
humY = j;
graph[i][j] = '.';
}
}
}
}
int getRes(char (*graph)[15], int cowX, int cowY, int humX, int humY) {
// 四个方向对应的x与y的偏移量,初始时人与牛都在下标为0对应的方向上
int directCow = 0, directHum = 0;
int dx[] = {-1, 0, 1, 0};
int dy[] = {0, 1, 0, -1};
/*
判断是否能够相遇,可以在移动次数达到一定值时判定为无法相遇。
另一种思路:设定一种状态,如果这个状态以前出现过,说明他们进入了循环,不能相遇。
状态包括:人和牛的各自坐标x和y以及他们各自的方向。
*/
// 图100个点,如果移动200次没有追上就不会再追上
for (int i = 1; i <= 200; ++i) {
// 判断牛当前前进方向的前一个点是否为障碍物
// 是障碍物就改变其方向
if (graph[cowX + dx[directCow]][cowY + dy[directCow]] == '*') {
directCow = (directCow + 1) % 4;
} else {
// 否则牛向此方向前进
cowX = cowX + dx[directCow];
cowY = cowY + dy[directCow];
}
if (graph[humX + dx[directHum]][humY + dy[directHum]] == '*') {
directHum = (directHum + 1) % 4;
} else {
humX = humX + dx[directHum];
humY = humY + dy[directHum];
}
if (cowX == humX && cowY == humY) {
return i;
}
}
return 0;
}
int main() {
char graph[15][15] = { 0 };
// 图从[1,1]开始,且以*填充空白,简化越界判断
fill(&graph[0][0], &graph[0][0] + sizeof(graph), '*');
int cowX = -1, cowY = -1;
int humX = -1, humY = -1;
getGraph(graph, cowX, cowY, humX, humY);
int res = getRes(graph, cowX, cowY, humX, humY);
cout << res << endl;
return 0;
}
P1518 [USACO2.4]两只塔姆沃斯牛 The Tamworth Two的更多相关文章
- 洛谷P1518 两只塔姆沃斯牛 The Tamworth Two
P1518 两只塔姆沃斯牛 The Tamworth Two 109通过 184提交 题目提供者该用户不存在 标签USACO 难度普及+/提高 提交 讨论 题解 最新讨论 求数据 题目背景 题目描 ...
- luogu P1518 两只塔姆沃斯牛 The Tamworth Two
luogu P1518 两只塔姆沃斯牛 The Tamworth Two 题目描述 两只牛逃跑到了森林里.农夫John开始用他的专家技术追捕这两头牛.你的任务是模拟他们的行为(牛和John). 追击在 ...
- 洛谷 P1518 两只塔姆沃斯牛 The Tamworth Two
P1518 两只塔姆沃斯牛 The Tamworth Two 题目背景 题目描述 两只牛逃跑到了森林里.农夫John开始用他的专家技术追捕这两头牛.你的任务是模拟他们的行为(牛和John). 追击在1 ...
- 洛谷——P1518 两只塔姆沃斯牛 The Tamworth Two
https://www.luogu.org/problem/show?pid=1518 题目背景 题目描述 两只牛逃跑到了森林里.农夫John开始用他的专家技术追捕这两头牛.你的任务是模拟他们的行为( ...
- P1518 两只塔姆沃斯牛 The Tamworth Two(简单的搜索题)
题目描述 两只牛逃跑到了森林里.农夫John开始用他的专家技术追捕这两头牛.你的任务是模拟他们的行为(牛和John). 追击在10x10的平面网格内进行.一个格子可以是: 一个障碍物, 两头牛(它们总 ...
- 洛谷 P1518 两只塔姆沃斯牛
P1518 两只塔姆沃斯牛 The Tamworth Two 简单的模拟题,代码量不大. 他们走的路线取决于障碍物,可以把边界也看成障碍物,遇到就转,枚举次,因为100 * 100 * 4,只有4个可 ...
- 【USACO 2.4.1】两只塔姆沃斯牛
[题目描述] 两只牛逃跑到了森林里.农夫John开始用他的专家技术追捕这两头牛.你的任务是模拟他们的行为(牛和John). 追击在10x10的平面网格内进行.一个格子可以是: 一个障碍物, 两头牛(它 ...
- powershell中的两只爬虫
--------------------序-------------------- (PowerShell中的)两只爬虫,两只爬虫,跑地快,爬网页不赖~~~ 一只基于com版的ie,一只基于.net中 ...
- 青蛙的约会 扩展欧几里得 方程ax+by=c的整数解 一个跑道长为周长为L米,两只青蛙初始位置为x,y;(x!=y,同时逆时针运动,每一次运动分别为m,n米;问第几次运动后相遇,即在同一位置。
/** 题目:青蛙的约会 链接:https://vjudge.net/contest/154246#problem/R 题意:一个跑道长为周长为L米,两只青蛙初始位置为x,y:(x!=y,同时逆时针运 ...
随机推荐
- .Net Core 文件打包压缩
最近项目需要实现多文件打包的功能,尝试了一些方法,最后发现使用 ICSharpCode.SharpZipLib 最符合项目的要求. 具体实现如下: 1.在 Nuget 中安装 ICSharpCod ...
- JS根据日期获取判断星期几
/** * 根据日期字符串获取星期几 * @param dateString 日期字符串(如:2020-05-02) * @returns {String} */ function getWeek(d ...
- JAVA获取昨天、今天、明天等日期
/** * 获取明天的日期字符串 * @return */ public static String tomorrowDateStr(){ Date date=new Date();//取时间 Cal ...
- FastAPI(六十五)实战开发《在线课程学习系统》基础架构的搭建
在之前三篇,我们分享的就是需求的分析,基本接口的整理,数据库链接的配置.这次我们分享项目的基本框架,目录结构如下: common目录 通用的目录,一些通用的处理放在这里 models目录 数据库相关的 ...
- 【LeetCode】1171. Remove Zero Sum Consecutive Nodes from Linked List 解题报告 (C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 preSum + 字典 日期 题目地址:https:/ ...
- 【LeetCode】88. Merge Sorted Array 解题报告(Java & Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 新建数组 日期 题目地址:https://leetc ...
- Java 计算加几个月之后的时间
Java 计算加几个月之后的时间 public static Date getAfterMonth(String inputDate,int number) { Calendar c = Calend ...
- TLS、SSL
TLS/SSL 的功能实现主要依赖于三类基本算法:散列函数 Hash.对称加密和非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性. ...
- 【Java例题】4.2 级数求和2
2. 计算级数之和: y=1/1!*x-1/3!*x^3+1/5!*x^5+...+ (-1)^n/(2n+1)!*x^(2n+1). 这里的"^"表示乘方,"!&quo ...
- [opencv]利用minAreaRect计算平面矩形的旋转角度
#include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp" #include ...