题意: 有两只兔子,一只在左上角,一只在右上角,两只兔子有自己的移动速度(每小时),和初始移动方向。

现在有3种可能让他们转向:撞墙:移动过程中撞墙,掉头走未完成的路。 相碰: 两只兔子在K点整(即处理完一小时走的路后),在同一点,兔子A和兔子B的方向互相交换一下。 向左转 : 两只兔子有自己的转向时间T,每隔T小时,它就会向左转, 但是相碰的优先级高于它,相碰之后就不处理左转问题了。

写模拟题还是很有趣的......练练手

#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <vector>
#include <set>
#include <queue>
#include <stack>
#include <climits>//形如INT_MAX一类的
#define MAX 100005
#define INF 0x7FFFFFFF
#define REP(i,s,t) for(int i=(s);i<=(t);++i)
#define ll long long
#define mem(a,b) memset(a,b,sizeof(a))
#define mp(a,b) make_pair(a,b)
#define L(x) x<<1
#define R(x) x<<1|1
# define eps 1e-5
//#pragma comment(linker, "/STACK:36777216") ///传说中的外挂
using namespace std;
int n;
struct node {
int x,y;
int sp,turn;
int dir; // 0,1,2,3
} tom,jer; int dirx[] = {-1,0,1,0};
int diry[] = {0,1,0,-1};
int judge(char c) {
if(c == 'N') return 0;
if(c == 'E') return 1;
if(c == 'S') return 2;
if(c == 'W') return 3;
} void go(node &a,int d) {
for(int i=0; i<d; i++) {
if(a.x == 1 && a.dir == 0) {
a.dir = 2;
}
if(a.x == n && a.dir == 2) {
a.dir = 0;
}
if(a.y == 1 && a.dir == 3) {
a.dir = 1;
}
if(a.y == n && a.dir == 1) {
a.dir = 3;
}
a.x = a.x + dirx[a.dir];
a.y = a.y + diry[a.dir];
}
} bool meet() {
if(tom.x == jer.x && tom.y == jer.y) {
swap(tom.dir,jer.dir);
return true;
}
return false;
} void move(node &a,int step,bool flag) {
if(flag == 0) {
if(step % a.turn == 0 && step != 0) a.dir --;
if(a.dir < 0) a.dir = 3;
}
int dir = a.dir;
if(dirx[dir] != 0) {
int dx = abs(a.sp * dirx[dir]);
go(a,dx);
}
if(diry[dir] != 0) {
int dy = abs(a.sp * diry[dir]);
go(a,dy);
}
} void solve(int h) {
int step = 0;
while(step < h) {
bool flag = 0;
if(meet()) flag = 1;
//cout << step << endl;
move(tom,step,flag);
//cout << "tom: " << tom.x << ' ' << tom.y << endl;
move(jer,step,flag);
//cout << "jer: " << jer.x << ' ' << jer.y << endl;
step ++;
}
}
int main() {
char c;
int h;
while(scanf("%d",&n) && n) {
tom.x = 1;
tom.y = 1;
jer.x = n;
jer.y = n;
getchar();
cin >> c;
scanf("%d%d",&tom.sp,&tom.turn);
tom.dir = judge(c);
cin >> c;
scanf("%d%d",&jer.sp,&jer.turn);
jer.dir = judge(c);
scanf("%d",&h);
solve(h);
printf("%d %d\n",tom.x,tom.y);
printf("%d %d\n",jer.x,jer.y);
}
return 0;
}

最新文章

  1. jQuery操作DOM元素
  2. 【原创】开源Math.NET基础数学类库使用(05)C#解析Delimited Formats数据格式
  3. Tomcat免安装配置
  4. 如何在html结构标签中使用js 变量 生成可变化的 title标题?
  5. debug实战:进程Hang+High CPU
  6. java基础:数据类型
  7. volatile之一--volatile不能保证原子性
  8. ubuntu14.04中解压缩window中的zip文件,文件名乱码的解决方法
  9. Hadoop0.20.2 Bloom filter应用演示样例
  10. Java虚拟机创建对象的内存分配以及对象的内存布局
  11. css学习の第三弹—盒模型的创建和使用
  12. 九,微信小程序开发浅谈
  13. 【Bad Practice】12306 query
  14. Apache httpd.conf配置文件主要内容解释
  15. wpf-xaml-命名空间
  16. 解决使用C/C++配置ODBC链接使用SQLConnect返回-1
  17. 使用chrome浏览器无法访问github提示不是私密连接且无继续前往选项
  18. 老司机在zabbix上的一次翻车
  19. Gravitational Teleport docker-compose简单运行
  20. 删除php数组中的元素

热门文章

  1. poj 3250 Bad Hair Day (单调栈)
  2. Ollydbg 中断方法浅探
  3. asp.net控件(1)Repeater
  4. delphi xe3的helper语法 good
  5. Log4delphi使用心得
  6. java复制文件的4种方式
  7. make menuconfig出错
  8. Drawable(1)各种Drawable Resource介绍
  9. Matlab read_grib.r4 安装新方法(转自:http://blog.sina.com.cn/s/blog_9f36648b010179s7.html)
  10. WebService的优点和基本原理