USACO 2.4.1 The Tamworth Two

牛和农夫按照固定的走法在10x10的地图中走,每分钟走一步,求经过几分钟相遇。永远不能相遇输出0.

纯模拟的题。

判断永远不能相遇的方法是如果遇到了一个先前的状态,那么肯定存在循环,必定不能相遇。

程序中把状态表示为牛和农夫的位置以及面向的方向,通过map判断是否遇到重复状态,因为map中不存在的键会有默认值,对于bool来说就是false。

一点点空间的优化是地图只用存一份,牛和农夫不显示在地图上,尽通过状态里的点间接表示。

View Code
  1 /*
  2 ID: xjtuacm1
  3 PROG: ttwo
  4 LANG: C++
  5 */
  6 #include<iostream>
  7 #include<stack>
  8 #include<cstring>
  9 #include<cstdio>
 10 #include<queue>
 11 #include<algorithm>
 12 #include<map>
 13 using namespace std;
 14 
 15 const int N = 10;
 16 enum direction {NORTH, EAST, SOUTH, WEST};
 17 
 18 struct point
 19 {
 20     int x, y;
 21     point(int xx= 0, int yy = 0) :x(xx), y(yy) {}
 22     void set(int xx, int yy)
 23     {
 24         x = xx;
 25         y = yy;
 26     }
 27     bool operator==(const point& pt) const
 28     {
 29         return x == pt.x && y == pt.y;
 30     }
 31 };
 32 
 33 struct state
 34 {
 35     int d[2];
 36     point pt[2];
 37     state() { d[0] = d[1] = NORTH; }
 38 
 39     bool operator<(const state& s) const
 40     {
 41         return memcmp(this, &s, sizeof(state)) < 0;
 42     }
 43 };
 44 
 45 map<state, bool> h;
 46 char pane[N][N];
 47 
 48 inline bool inRange(point pt)
 49 {
 50     return pt.x >= 0
 51             && pt.x < 10
 52             && pt.y >= 0
 53             && pt.y < 10;
 54 }
 55 
 56 bool met(const state& s)
 57 {
 58     return s.pt[0] == s.pt[1];
 59 }
 60 
 61 void next(state& s)
 62 {
 63     point npt[2];
 64 
 65     for(int i = 0; i!= 2; i++)
 66     {
 67         switch(s.d[i])
 68         {
 69         case NORTH:
 70             npt[i].set(s.pt[i].x - 1, s.pt[i].y);
 71             break;
 72         case EAST:
 73             npt[i].set(s.pt[i].x, s.pt[i].y + 1);
 74             break;
 75         case SOUTH:
 76             npt[i].set(s.pt[i].x + 1, s.pt[i].y);
 77             break;
 78         case WEST:
 79             npt[i].set(s.pt[i].x, s.pt[i].y - 1);
 80             break;
 81         }
 82 
 83         if(inRange(npt[i])
 84             && pane[npt[i].x][npt[i].y] != '*')
 85         {
 86             s.pt[i] = npt[i];
 87         }
 88         else
 89         {
 90             s.d[i] += 1;
 91             s.d[i] %= 4;
 92         }
 93     }
 94 }
 95 
 96 int main(int argc, char *argv[])
 97 {
 98     freopen("ttwo.in", "r", stdin);
 99 #ifndef USACO
100     freopen("ttwo.out", "w", stdout);
101 #endif // USACO
102 
103     state s;
104 
105     for(int i = 0; i!= N; i++)
106         for(int j = 0; j!= N; j++)
107     {
108         scanf("%c", &pane[i][j]);
109         if(pane[i][j] == '\n')
110             scanf("%c", &pane[i][j]);
111 
112         if(pane[i][j] == 'F'
113             || pane[i][j] == 'C')
114             {
115                 int t = (pane[i][j] - 'C' == 0 ? 0 : 1);
116                 s.pt[t].set(i, j);
117                 pane[i][j] = '.';
118             }
119     }
120 
121     int minute = 0;
122     h[s] = true;
123     while(!met(s))
124     {
125         next(s);
126         if(h[s])
127         {
128             printf("0\n");
129             return 0;
130         }
131 
132         h[s] = true;
133         minute++;
134     }
135 
136     printf("%d\n", minute);
137 
138     return 0;
139 }

BTW,纯模拟真心考验细心程度= =。。。。

转载于:https://www.cnblogs.com/tech-cabin/archive/2013/02/05/2893386.html

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

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

相关文章

013,spring boot下JedisCluster客户端的配置,连接Redis集群

2019独角兽企业重金招聘Python工程师标准>>> 1&#xff0c;pom依赖添加&#xff1a; <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <type>jar</typ…

android控件使用大全,Android常见控件使用详解

本文实例为大家分享了六种Android常见控件的使用方法&#xff0c;供大家参考&#xff0c;具体内容如下1、TextView 主要用于界面上显示一段文本信息2、Button 用于和用户交互的一个按钮控件//为Button点击事件注册一个监听器public class Click extends Activity{private Butto…

Afterthought 原来是这样的啊。。。。

$(ProjectDir)Libs\Afterthought\Afterthought.Amender.exe "$(TargetPath)" "$(TargetDir)EntityFramework.Patterns.dll" 我实际上分析代码好久&#xff0c;也没整明白它是怎么运行的&#xff0c;看一下官方文档明白了&#xff0c;原来。。。 Next, add …

POJ 1228 —— “稳定”凸包

POJ 1228 Grandpas Estate 这是个好题目&#xff0c;同时也是个不和谐的题目&#xff08;不和谐原因是题目出的存在漏洞&#xff0c;数据弱&#xff0c;而且有些条件没给清楚&#xff0c;为了一个SB错误无限WA之后&#xff0c;终于AC&#xff09; 题意就废了我好长时间&#xf…

在Application_Error事件中获取当前的Action和Control

ASP.NET MVC程序处理异常时&#xff0c;方法有很多&#xff0c;网上也有列举了6种&#xff0c;下面是使用全局处理在Global.asax文件的Application_Error事件中实现。既然是ASP.NET MVC,我需要捕捉到Controller和Action名称。怎样实现可以参考下面代码&#xff1a; 程序运行结果…

1.关于浏览器

一、认识主流浏览器 Chrome谷歌浏览器Safari苹果浏览器Firefox火狐浏览器Opera欧朋浏览器 二、浏览器内核是什么&#xff1f; 三、五大浏览器&#xff0c;四大内核 四、前端做网页开发用什么浏览器&#xff1f; Chrome谷歌浏览器。

实时数据交换平台 - BottledWater-pg with confluent

标签 PostgreSQL , Bottled Water , Kafka , Confluent , IoT 背景 想必大家都在图书馆借过书&#xff0c;小时候有好看的书也会在小伙伴之间传阅。 借书和数据泵有点类似&#xff0c;一份数据通过数据泵实时的分享给订阅者。 例如在IoT的场景中&#xff0c;有流式分析的需求&a…

asp.net缓存(二)

ASP.NET页面局部缓存 有时缓存整个页面是不现实的&#xff0c;因为页的某些部分可能在每次请求时都需要变化。在这些情况下&#xff0c;只能缓存页的一部分。顾名思义&#xff0c;页面部分缓存是将页面部分内容保存在内存中以便响应用户请求&#xff0c;而页面其他部分内容则为…

(七)Maven使用的最佳实践

这里说一下在使用Maven过程中不是必须的&#xff0c;但十分有用的几个实践&#xff0c;关键时刻或许能解决您的问题。 1.设置MAVEN_OPTS环境变量 通常需要设置MAVEN_OPTS的值为-Xms128m -Xmx512m&#xff0c;因为Java默认的最大可用内存往往不能够满足Maven运行的需要&#xff…

android beam传输速率,无线网络的速率为何不能达到最大值

1、无线速率可以达到最大值&#xff0c;只是发送速率和传输流量是两个概念&#xff0c;通俗点讲&#xff0c;无线的发送速率是把信号以指定速率发出去(信号好的时候以高速率发&#xff0c;信号差的时候以低速率发)。传输流量是指单位时间内传输的数据量&#xff0c;大部分用户关…

【SMTP 补录 Apache服务】

【补录&#xff0c;续】1.【配置空壳邮件接受】【mta】【前置&#xff1a;在/etc/named.rfc1912.zones 添加一个可以接受邮件的域hxl.org&#xff08;与你数据库中写的向对应&#xff09;,这个域的所在ip就是你机子的&#xff0c;因为要从你的机子转发】 【配置该机的vim/etc/…

开启chrome默认支持ipv6

在快捷方式后面的属性后面输入 --enable-ipv6 以下为转载&#xff1a; [转载]chrome开启或关闭IPV6方法 (2012-05-27 17:54:06) 转载▼ 标签&#xff1a; 转载 分类&#xff1a; 技术 原文地址&#xff1a;chrome开启或关闭IPV6方法作者&#xff1a;余鲲涛 chrome和firefox都是…

ipoo3可以用鸿蒙,iqooneo3支持无线充电吗_iqooneo3可以无线充电吗

iqoo neo3在不高的价格上还保证了自己的品质&#xff0c;有很高的性能&#xff0c;很不错的屏幕。那么这款手机可以支持无线充电吗&#xff1f;小编为大家介绍关于iqoo neo3的充电方面。1.iqoo neo3可以支持无线充电吗iQOO Neo3 配备了 44W 超级闪充&#xff0c;属于小刀&#…

红帽Linux故障定位技术详解与实例(1)

红帽Linux故障定位技术详解与实例(1) 2011-09-28 14:26 圈儿 BEAREYES.COM 我要评论(0) 字号&#xff1a;T | T在线故障定位就是在故障发生时, 故障所处的操作系统环境仍然可以访问&#xff0c;故障处理人员可通过console, ssh等方式登录到操作系统上&#xff0c;在shell上执行…

app开发历程————Android程序解析服务器端的JSON格式数据,显示在界面上

上一篇文章写的是服务器端利用Servlet 返回JSON字符串&#xff0c;本文主要是利用android客户端访问服务器端链接&#xff0c;解析JSON格式数据&#xff0c;放到相应的位置上。 首先&#xff0c;android程序的布局文件main.xml 1 <LinearLayout xmlns:android"http://s…

Android IOS WebRTC 音视频开发总结(八十七)-- WebRTC中丢包重传NACK实现分析

Android IOS WebRTC 音视频开发总结&#xff08;八十七&#xff09;-- WebRTC中丢包重传NACK实现分析 本文主要介绍WebRTC中丢包重传NACK的实现&#xff0c;作者&#xff1a;weizhenwei &#xff0c;文章最早发表在编风网&#xff0c;微信ID&#xff1a;befoio 支持原创&#x…

为网格布局图片打造的超炫 CSS 加载动画

今天&#xff0c;我想与大家分享一些专门为网格布局的图像制作的很酷的 CSS 加载动画效果。您可以把这些效果用在你的作品集&#xff0c;博客或任何你想要的网页中。设置很简单。我们使用了下面这些工具库来实现这个效果&#xff1a; Normalize.css 来替代传统的 CSS 复位&…

一个YII社区学习网站

2019独角兽企业重金招聘Python工程师标准>>> https://getyii.com/ 转载于:https://my.oschina.net/u/2552765/blog/803311

MapReduce实现手机上网日志分析(分区)

一、问题背景 实际业务的需要&#xff0c;比如以移动为例&#xff0c;河南的用户去了北京上网&#xff0c;那么他的上网信息默认保存在了北京的基站&#xff0c;那么我们想要查询北京地区的上网日志信息默认也包含了其他地区用户的在本区的上网信息&#xff0c;否则只能扫描日志…

计算机专业四次评估,教育部第四次“计算机专业”学科评估,四所高校获A+评级...

随着2017年权威的第四次学科评估结果出炉后&#xff0c;相信很多高校学科上实力的争议应该可以平息了。这也是国内官方的学科排名&#xff0c;一共分为12等。入围学科的最高等级为A&#xff0c;最低评级为C-&#xff0c;如果在同一评级内&#xff0c;按学校代码先后依次排序。本…