【HDU 4452 Running Rabbits】简单模拟

简介: 两只兔子Tom和Jerry在一个n*n的格子区域跑,分别起始于(1,1)和(n,n),有各自的速度speed(格/小时)、初始方向dir(E、N、W、S)和左转周期turn(小时/次)。 各自每小时往E、N、W、S中一个方向跑speed格,每隔turn小时左转一次(即逆时针的下一个方向)。

两只兔子Tom和Jerry在一个n*n的格子区域跑,分别起始于(1,1)和(n,n),有各自的速度speed(格/小时)、初始方向dir(E、N、W、S)和左转周期turn(小时/次)。

各自每小时往E、N、W、S中一个方向跑speed格,每隔turn小时左转一次(即逆时针的下一个方向)。

行走中若第i步将碰壁,则第i步及剩余步改为原方向的相反方向(即折返)。

两只兔子若在第i小时到达同一点,则交换彼此的方向再走下一小时;若相遇时有兔子恰好该左转,则放弃此次左转。

第一眼像搜索,后来发现只是简单模拟~~

  1 #include <cstdio>
  2 #include <algorithm>
  3 using namespace std;
  4 
  5 struct Status
  6 {
  7     int x,y,d,h;//坐标,方向。当前时间
  8 }st,sj;
  9 
 10 int n,k;
 11 char dir_t,dir_j;
 12 int speed_t,speed_j;
 13 int turn_t,turn_j;
 14 
 15 void go_next(Status &s,int speed)
 16 {
 17     s.h++;
 18     int cnt=0;
 19     switch(s.d)//由于speed<n,所以最多只碰壁折返一次,并且两只兔子不会在一小时内相遇两次(但其实可能在走向下一个格子的过程中遇到。。。)
 20     {
 21     case 0:
 22         while(s.y<n&&cnt<speed){s.y++; cnt++;}
 23         if(cnt<speed)
 24         {
 25             s.y-=speed-cnt;
 26             s.d=2;
 27         }break;
 28     case 1:
 29         while(s.x>1&&cnt<speed){s.x--; cnt++;}
 30         if(cnt<speed)
 31         {
 32             s.x+=speed-cnt;
 33             s.d=3;
 34         }break;
 35     case 2:
 36         while(s.y>1&&cnt<speed){s.y--; cnt++;}
 37         if(cnt<speed)
 38         {
 39             s.y+=speed-cnt;
 40             s.d=0;
 41         }break;
 42     case 3:
 43         while(s.x<n&&cnt<speed){s.x++; cnt++;}
 44         if(cnt<speed)
 45         {
 46             s.x-=speed-cnt;
 47             s.d=1;
 48         }
 49     }
 50 }
 51 
 52 int main()
 53 {
 54     freopen("4452.txt","r",stdin);
 55     while(scanf("%d",&n)!=EOF)
 56     {
 57         if(n==0) break;
 58         getchar();
 59         scanf("%c",&dir_t);
 60         scanf("%d%d",&speed_t,&turn_t);
 61         getchar();
 62         scanf("%c",&dir_j);
 63         scanf("%d%d",&speed_j,&turn_j);
 64         scanf("%d",&k);
 65 
 66         st.x=st.y=1;
 67         st.h=sj.h=0;
 68         sj.x=sj.y=n;
 69         st.d=turn_t;
 70         sj.d=turn_j;
 71         switch(dir_t)
 72         {
 73             case 'E':st.d=0;break;
 74             case 'N':st.d=1;break;
 75             case 'W':st.d=2;break;
 76             case 'S':st.d=3;break;
 77         }
 78         switch(dir_j)
 79         {
 80             case 'E':sj.d=0;break;
 81             case 'N':sj.d=1;break;
 82             case 'W':sj.d=2;break;
 83             case 'S':sj.d=3;break;
 84         }
 85 
 86         while(k--)
 87         {
 88             if(st.x==sj.x&&st.y==sj.y)
 89                 swap(st.d,sj.d);
 90             else
 91             {
 92                 if(st.h!=0&&st.h%turn_t==0)
 93                     st.d=(st.d+1)%4;
 94                 if(sj.h!=0&&sj.h%turn_j==0)
 95                     sj.d=(sj.d+1)%4;
 96             }
 97             go_next(st,speed_t);
 98             go_next(sj,speed_j);
 99         }
100         printf("%d %d\n",st.x,st.y);
101         printf("%d %d\n",sj.x,sj.y);
102     }
103     return 0;
104 }

 

目录
相关文章
|
Linux iOS开发 MacOS
typora下载和破解(仅供学习)
Typora 一款 Markdown 编辑器和阅读器 风格极简 / 多种主题 / 支持 macOS,Windows 及 Linux 实时预览 / 图片与文字 / 代码块 / 数学公式 / 图表 目录大纲 / 文件管理 / 导入与导出 ……
162893 11
typora下载和破解(仅供学习)
|
IDE Java 测试技术
【IDEA】常用设置,让你更快速的编程
在使用JetBrains的进行软件开发时,了解和正确配置一些常用设置是非常重要的。IDEA的强大功能和定制性使得开发过程更加高效和舒适。在本文中,我们将介绍一些常用的IDEA设置,帮助您更好地利用IDEA进行开发。这些设置包括编辑器选项、代码样式、插件管理和键盘快捷键等。IDEA是JetBrains公司开发的一款集成开发环境(Integrated Development Environment,简称IDE),全名为。它是一个功能强大、智能化的Java开发工具。
|
Linux 数据安全/隐私保护
linux之/etc/login.defs文件
linux之/etc/login.defs文件
307 5
Unity精华☀️Audio Mixer终极教程:用《双人成行》讲解它的用途
Unity精华☀️Audio Mixer终极教程:用《双人成行》讲解它的用途
|
9月前
|
XML API 开发者
探究获取亚马逊畅销榜API接口及实战应用
亚马逊MWS(商城网络服务)提供了一系列API接口,帮助开发者获取平台数据,其中畅销榜API尤为关键。通过注册开发者账号、创建应用并申请权限,可使用HTTP POST请求获取商品的销售排名、价格等信息。Python代码示例展示了如何构建和发送请求,并处理返回的XML或JSON数据。注意遵守亚马逊的频率限制、数据准确性和合规性要求,以确保安全合法地利用这些数据支持电商业务决策。
267 1
|
11月前
|
Kubernetes 网络协议 Python
Python网络编程:从Socket到Web应用
在信息时代,网络编程是软件开发的重要组成部分。Python作为多用途编程语言,提供了从Socket编程到Web应用开发的强大支持。本文将从基础的Socket编程入手,逐步深入到复杂的Web应用开发,涵盖Flask、Django等框架的应用,以及异步Web编程和微服务架构。通过本文,读者将全面了解Python在网络编程领域的应用。
162 1
|
12月前
|
Kubernetes Cloud Native 持续交付
云原生技术入门及应用实例
【9月更文挑战第34天】云原生,这个词汇在IT界已经越来越热。它代表的是一种构建和运行应用程序的方法,旨在充分利用云计算的优势。本文将从云原生的基本概念入手,深入探讨其核心技术和应用场景,最后通过一个简单的代码示例,带你走进云原生的世界。
|
并行计算 算法 量子技术
量子计算与材料科学:加速新材料研发进程
【9月更文挑战第24天】量子计算与材料科学的深度融合,正在开启一个全新的科研时代。通过利用量子计算技术的优势,我们可以更加高效地模拟和预测材料的性能,加速新材料的研发进程。这不仅有助于推动材料科学的进步,还将为工业、能源、环保等领域带来革命性的变革。让我们共同期待量子计算技术在材料科学领域的辉煌未来!
|
12月前
|
机器学习/深度学习 自然语言处理 搜索推荐
《通义灵码:开启智能新纪元》
在科技飞速发展的时代,人工智能如同璀璨星辰照亮人类前行的道路。通义灵码凭借独特的魅力和强大的功能,成为智能时代的先锋。它汇聚全球顶尖科学家和工程师,采用自然语言处理、知识图谱构建及深度学习等技术,开启未来智能世界大门,为智能客服、医疗、金融、教育和交通等领域带来前所未有的变革与机遇。通义灵码不仅高效准确,还能提供个性化服务,并不断学习进化。面对数据安全、伦理道德等挑战,通义灵码将持续创新,推动社会进步,引领我们走向更加智能的未来。
203 0
|
容器
OOP 中的组合、聚合和关联
【8月更文挑战第22天】
204 0