HDU 4452 Running Rabbits (模拟题)
2024-10-20 05:28:37
题意: 有两只兔子,一只在左上角,一只在右上角,两只兔子有自己的移动速度(每小时),和初始移动方向。
现在有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;
}
最新文章
- jQuery操作DOM元素
- 【原创】开源Math.NET基础数学类库使用(05)C#解析Delimited Formats数据格式
- Tomcat免安装配置
- 如何在html结构标签中使用js 变量 生成可变化的 title标题?
- debug实战:进程Hang+High CPU
- java基础:数据类型
- volatile之一--volatile不能保证原子性
- ubuntu14.04中解压缩window中的zip文件,文件名乱码的解决方法
- Hadoop0.20.2 Bloom filter应用演示样例
- Java虚拟机创建对象的内存分配以及对象的内存布局
- css学习の第三弹—盒模型的创建和使用
- 九,微信小程序开发浅谈
- 【Bad Practice】12306 query
- Apache httpd.conf配置文件主要内容解释
- wpf-xaml-命名空间
- 解决使用C/C++配置ODBC链接使用SQLConnect返回-1
- 使用chrome浏览器无法访问github提示不是私密连接且无继续前往选项
- 老司机在zabbix上的一次翻车
- Gravitational Teleport docker-compose简单运行
- 删除php数组中的元素
热门文章
- poj 3250 Bad Hair Day (单调栈)
- Ollydbg 中断方法浅探
- asp.net控件(1)Repeater
- delphi xe3的helper语法 good
- Log4delphi使用心得
- java复制文件的4种方式
- make menuconfig出错
- Drawable(1)各种Drawable Resource介绍
- Matlab read_grib.r4 安装新方法(转自:http://blog.sina.com.cn/s/blog_9f36648b010179s7.html)
- WebService的优点和基本原理