ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-09-03 17:05:21  阅读:147  来源: 互联网

标签:... P1518 格子 10 Tamworth 塔姆沃 Farmer John ......


题目描述

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

追击在 10 \times 1010×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。

输入输出样例

输入 #1复制

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

输出 #1复制

49

说明/提示

翻译来自NOCOW

USACO 2.4

做法暴力枚举,困难点就是如何判断结束,找重复的情况,因为数据不大,10*10,所以奶牛和农夫各400种请况,因此根据乘法原理,如果分钟数超过160000就不可能找得到了

#include<bits/stdc++.h>
using namespace std;
char arr[12][12];
int cx , cy , fx , fy; 
int main(){
	for(int i = 1 ; i <= 10 ; i++ ){
		for(int j = 1 ; j <= 10 ; j++) {
			cin >> arr[i][j];
			if(arr[i][j] == 'F') fx = i , fy = j;
			if(arr[i][j] == 'C') cx = i , cy = j;
		}
	}
	for(int i = 0 ; i <= 11 ; i++) arr[0][i] = arr[11][i] = arr[i][0] = arr[i][11] = '*';
	int ans , flagc = 1 , flagf = 1;
	for(ans = 0 ; !(cx == fx && cy == fy) && ans <= 100000 ; ans++){
		if(flagc == 1){
			if(arr[cx - 1][cy] == '*') flagc++;
			else cx--;
		}
		else if(flagc == 2){
			if(arr[cx][cy + 1] == '*') flagc = 3;
			else cy++;
		}
		else if(flagc == 3){
			if(arr[cx + 1][cy] == '*') flagc = 4;
			else cx++;
		}
		else if(flagc == 4) {
			if(arr[cx][cy - 1] == '*') flagc = 1; 
			else cy--;
 		}
 		
 		if(flagf == 1){
			if(arr[fx - 1][fy] == '*') flagf = 2;
			else fx--;
		}
		else if(flagf == 2){
			if(arr[fx][fy + 1] == '*') flagf = 3;
			else fy++;
		}
		else if(flagf == 3){
			if(arr[fx + 1][fy] == '*') flagf = 4;
			else fx++;
		}
		else if(flagf == 4) {
			if(arr[fx][fy - 1] == '*') flagf = 1; 
			else fy--;
 		}
	}
	if(ans > 10000) cout << 0;
	else cout << ans;
	return 0;
}

标签:...,P1518,格子,10,Tamworth,塔姆沃,Farmer,John,......
来源: https://blog.csdn.net/lx18846454496/article/details/120085631

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有