[POJ1801]Formula Racing(模拟)
Formula Racing
Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 289 Accepted: 77 Description
Background
The brand new formula racing team Irarref needs your help! Irarref
doesn't have any real good drivers but they want to dominate formula
racing. Since fairness doesn't mean anything to them they are trying to
build a fully automatic driving control which needs almost no driver
interaction.
Before actually trying the automatic driving control on track and
risking to crash their precious cars (they don't care much about their
drivers), they want to test it in a computer simulation.
Problem
You have to simulate the movement of a car on a given track. To
simplify the problem, cars can only move in 8 directions (horizontal,
vertical, and diagonal) on cells of a regular 2-dimensional grid, where
directions are encoded as follows:
701
6 2
543
Every turn the car executes exactly one of the following commands:
command description move-on keep moving with the current speed and direction accelerate increase the speed by 1 brake decrease the speed by 1 (does not go below 0!) left turn 45 degrees left (decrease direction by 1) right turn 45 degrees right (increase direction by 1) In any case, a car moves its speed value in cells in its current
direction and crosses all cells in-between its old and new position.
When a car accelerates or brakes, its speed is adjusted before the
movement of the current turn. When a car turns, its direction is changed
before the movement.
The racing track is a 2-dimensional regular grid, where every cell
can be: road, non-road space (but still drivable), start/goal line (also
road and drivable), or wall.
Every car starts with an initial speed of 0 and has a maximum speed
which it cannot exceed. When a car hits non-road space its speed is
reduced to 1 in the next turn but it completes the move of this turn
with its current speed. When a car hits a wall it crashes, the
simulation stops immediately and there will be no next turn.
Every car is alone on the track, so you do not have to check for car/car collisions.Input
The first line contains the number of scenarios.
For each scenario, the first line contains width w and height h of
the racing track (1 <= w, h <= 1000).The following h lines contain
the layout of the racing track where road, non-road-space, start/goal
line, and wall are represented by "x", ".", "s", and "W", respectively.
The upper left corner of the racing area is (0, 0), the lower right
corner (w-1, h-1), where coordinates are given as pairs (x, y) where
x-direction is horizontal and y-direction is vertical.
A line containing the number n of cars to simulate follows the track description. For every car there are two lines:
- a line containing the initial x- and y-coordinate x and y,
direction d, and maximum speed m of the car, as integers separated by
single blanks, where 0 <= x <= w-1, 0 <= y <= h-1, 0 <= d
<= 7, 1 <= m- a line containing a string whose single characters each
encode one command for this car, where "m","a", "b", "l", and "r"
represent move-on, accelerate, brake, left, and right, respectively; the
number of commands for a car is at least 1 and at most 10000.It is guaranteed that the initial car position is not on a wall. It
is also guaranteed that the car does not leave the track area without
crashing.Output
The
output for every scenario begins with a line containing "Scenario #i:",
where i is the number of the scenario starting at 1. For every scenario
print for ever car the following information:
- If the car did not crash print a line containing the final
position (x- and y-coordinate), direction and speed of the car, all
separated by single spaces.If the car did crash print a line containing
the crash-point (x- and y-coordinate), direction and speed of the car at
the moment of the crash and the word "crashed", all separated by single
spaces.- For every hit of a start/goal field (a hit is counted when
moving onto a start/goal field) print a line beginning with "crossing
startline:", followed by a single space, the x- and
y-coordinates,direction, speed and the number of the simulation turn the
line was crossed or hit. The lines must be printed in the same order
the start/goal fields were hit.Print a blank line after each scenario.
Sample Input
1
12 12
WWWWWWWWWWWW
W...xxxx...W
W..xxxxxx..W
W.xxWWWWxx.W
WxxWW..WWxxW
WxxW....WxxW
WssW....WxxW
WxxWW..WWxxW
W.xxWWWWxx.W
W..xxxxxx..W
W...xxxx...W
WWWWWWWWWWWW
2
1 6 0 3
armmrarrmrrrbrmmb
1 5 0 4
ararmrramrmarSample Output
Scenario #1:
2 4 0 0
crossing startline: 2 6 0 1 13
5 11 5 2 crashedSource
TUD Programming Contest 2004, Darmstadt, Germany[Submit] [Go Back] [Status] [Discuss]
英文阅读题。1h读懂题,10min写完。
纯模拟,看网上没有代码就发一份吧。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; const int N=;
int n,m,T,mx,tot,times,x,y,d,mn,speed,len;
char op[N],mp[N][N];
const int dx[]={,,,,,-,-,-},dy[]={-,-,,,,,,-};
struct P{ int x,y,d,speed,id; }p[N*N]; void up(int &x){ if (x<mx) x++; }
void dn(int &x){ if (x) x--; } int main(){
scanf("%d",&T);
for (int cas=; cas<=T; cas++){
scanf("%d%d",&n,&m); printf("Scenario #%d:\n",cas);
for (int i=; i<n; i++) scanf("%s",mp[i]);
scanf("%d",×);
for (int tt=; tt<times; tt++){
scanf("%d%d%d%d",&x,&y,&d,&mx);
speed=tot=; bool cr=;
scanf("%s",op); len=strlen(op);
for (int i=; i<len; i++){
if (op[i]=='a') up(speed);
if (op[i]=='b') dn(speed);
if (op[i]=='l') d=(d+)%;
if (op[i]=='r') d=(d+)%;
bool flag=;
for (int j=; j<speed; j++){
x+=dx[d]; y+=dy[d];
if (mp[y][x]=='.') flag=;
if (mp[y][x]=='W') { printf("%d %d %d %d crashed\n",x,y,d,speed); cr=; break; }
if (mp[y][x]=='s') p[tot++]=(P){x,y,d,speed,i};
}
if (flag) speed=;
if (cr) break;
}
if (!cr) printf("%d %d %d %d\n",x,y,d,speed);
for (int i=; i<tot; i++) printf("crossing startline: %d %d %d %d %d\n",p[i].x,p[i].y,p[i].d,p[i].speed,p[i].id);
}
puts("");
}
return ;
}
[POJ1801]Formula Racing(模拟)的更多相关文章
- POJ 3672 Long Distance Racing (模拟)
题意:给定一串字符,u表示是上坡,d表示下坡,f表示平坦的,每个有不同的花费时间,问你从开始走,最远能走到. 析:直接模拟就好了,没什么可说的,就是记下时间时要记双倍的,因为要返回来的. 代码如下: ...
- PKUSC2018训练日程(4.18~5.30)
(总计:共66题) 4.18~4.25:19题 4.26~5.2:17题 5.3~5.9: 6题 5.10~5.16: 6题 5.17~5.23: 9题 5.24~5.30: 9题 4.18 [BZO ...
- HOJ题目分类
各种杂题,水题,模拟,包括简单数论. 1001 A+B 1002 A+B+C 1009 Fat Cat 1010 The Angle 1011 Unix ls 1012 Decoding Task 1 ...
- Lucky and Good Months by Gregorian Calendar - POJ3393模拟
Lucky and Good Months by Gregorian Calendar Time Limit: 1000MS Memory Limit: 65536K Description Have ...
- (转) Deep Reinforcement Learning: Playing a Racing Game
Byte Tank Posts Archive Deep Reinforcement Learning: Playing a Racing Game OCT 6TH, 2016 Agent playi ...
- HDUOJ-------1052Tian Ji -- The Horse Racing(田忌赛马)
Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J ...
- poj1472[模拟题]
Instant Complexity Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 2017 Accepted: 698 ...
- HDU 5912 Fraction 【模拟】 (2016中国大学生程序设计竞赛(长春))
Fraction Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Su ...
- HUNNU11342:Chemistry(模拟)
http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11342 Problem description The ch ...
随机推荐
- HDU3038:How Many Answers Are Wrong(带权并查集)
How Many Answers Are Wrong Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...
- 自定义orderBy字母函数
orderedUsers: function () { var arr = this.users; for (var i = 0; i < arr.length - 1; i++) { for ...
- 《vue.js实战》练习---数字输入框组件
html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- Drupal7导入语言包
下载语言包 然后把包存放在profiles\standard\translations目录下,安装. 如果出现如下错误 1.错误有MySql数据库默认引擎innoDB引起,只要mysql\bin\my ...
- 【Foreign】异色弧 [树状数组]
异色弧 Time Limit: 20 Sec Memory Limit: 256 MB Description Input Output 仅一行一个整数表示答案. Sample Input 8 1 ...
- Oop分析方法
为了实现Oop,这个我已经在一个前端的js项目中实现了Oop,过后总结:对于js这种动态语言,可以在运行时动态组件对象的属性和方法这种,解释型的语言来讲,真的是OOP,如果不存在关系数据库,仅仅是从后 ...
- [bzoj3990][SDOI2015]排序-搜索
Brief Description 小A有一个1-2^N的排列A[1..2^N],他希望将A数组从小到大排序,小A可以执行的操作有N种,每种操作最多可以执行一次,对于所有的i(1<=i<= ...
- [Leetcode Week4]Course Schedule II
Course Schedule II题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/course-schedule-ii/description/ De ...
- appium===Appium的前世今生
一.什么是Appium Appium是一个开源.跨平台的测试框架,可以用来测试原生及混合的移动端应用.Appium支持IOS.Android及FirefoxOS平台.Appium使用WebDriv ...
- Linux下f命令配置
一.工具 f 的配置 使用 ========== ========== ========== ========== ========== ========== ==== 一.配置方法: 首先在lin ...
