poj2632--模拟

/** \brief poj 2632
 *
 * \param date 2014/8/3
 * \param state AC
 * \return memory 776k time 16ms
 *
 */

#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

const int MAXN=101;
int Map[MAXN][MAXN];

int A,B;
int N,M;
int xf[4]={-1,0,1,0};
int yf[4]={0,1,0,-1};

struct Robot
{
    int x;
    int y;
    //char dir;
    int dir;
    //int num;
};

Robot robots[MAXN];

//将方向数字化
int charDir2Int(char cDir)
{
    switch(cDir)
    {
    case 'E':
        return 2;
    case 'S':
        return 3;
    case 'W':
        return 0;
    case 'N':
        return 1;
    };
}

//模拟搜索
bool Forward(int s,int t)
{
    int x,y;
    int d=robots[s].dir;
    x=robots[s].x;
    y=robots[s].y;
    Map[x][y]=0;//走过为0
    for(int i=0;i<t;i++)
    {
        x=x+xf[d];
        y=y+yf[d];
        //边界 -- wall判断
        if(x<1 || x>A || y<1 || y>B)
        {
            cout<<"Robot "<<s<<" crashes into the wall"<<endl;
            return true;
        }
        if(Map[x][y])
        {
            cout<<"Robot "<<s<<" crashes into robot "<<Map[x][y]<<endl;
            return true;
        }
    }
    robots[s].x=x;
    robots[s].y=y;
    Map[x][y]=s;//到达新点,赋上序号
    return false;
}

//指令--行动
bool Action(int s,char Dir,int t)
{
    switch(Dir)
    {
    case 'F':
        return Forward(s,t);
    case 'L':
        robots[s].dir=(robots[s].dir-t%4+4)%4;
        break;
    case 'R':
        robots[s].dir=(robots[s].dir+t%4)%4;
        break;
    }
    return false;
}

int main()
{
    //cout << "Hello world!" << endl;
    freopen("input.txt","r",stdin);
    int K;
    cin>>K;
    for(int k=0;k<K;k++)
    {
        memset(Map,0,sizeof(Map));
        cin>>A>>B;
        cin>>N>>M;
        for(int i=1;i<=N;i++)
        {
            int x,y;
            char dir;
            cin>>x>>y>>dir;
            robots[i].x=x;
            robots[i].y=y;
            robots[i].dir=charDir2Int(dir);
            //robots[i].num=i;
            Map[x][y]=i;
        }
        bool f=false;//it means that OK
        for(int j=0;j<M;j++)
        {
            int num,repeat;
            char op;
            cin>>num>>op>>repeat;
            //
            if(!f)f=Action(num,op,repeat);
        }
        if(!f)cout<<"OK"<<endl;
    }
    return 0;
}

参考:http://blog.csdn.net/tiantangrenjian/article/details/6827710

模拟算法:根据题目所述移动步骤逐步进行,利用数组array[i][j]代表(i,j)位置处的robot编号,没有则为0.

利用robot结构体记录下每个机器人当前的位置和方向。

对于‘F‘指令,需判断前进是否出界和前进的位置是否已有机器人。

对于‘L‘和‘R‘转向指令,只需修改机器人的方向值,注意同一方向转四次等于没转。

poj2632--模拟,布布扣,bubuko.com

时间: 2024-10-20 10:42:14

poj2632--模拟的相关文章

[poj]poj2632(模拟)

题意:模拟 模拟就行 #include<iostream> #include<cstdio> #include<stack> using namespace std; const int N=1e2+7; struct robot{ int id,x,y,to; }; const int dx[4]={0,1,0,-1}; const int dy[4]={1,0,-1,0}; int T,n,m,A,B,flag; int map[N][N]; robot rbt[N

poj2632 【模拟】

In a modernized warehouse, robots are used to fetch the goods. Careful planning is needed to ensure that the robots reach their destinations without crashing into each other. Of course, all warehouses are rectangular, and all robots occupy a circular

POJ2632——Crashing Robots

Crashing Robots DescriptionIn a modernized warehouse, robots are used to fetch the goods. Careful planning is needed to ensure that the robots reach their destinations without crashing into each other. Of course, all warehouses are rectangular, and a

CentOS系统启动及内核大破坏模拟实验

讲过了centos的启动流程,此时是不是想来点破坏呢?那就尽情的玩耍吧,记得在实验之前拍个快照,万一哪个环节错误恢复不回来了呢,毕竟数据无价,话不多说,开始. 一.删除伪系统根.(ramdisk文件) (1)模拟误操作删除ramdisk文件. ①模拟误删除initramfs-3.10.0-514.el7.x86_64.img文件. ②为当前正在使用的内核重新制作ramdisk文件 格式为:mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) (

NYOJ 2356: 哈希计划【模拟】

题目描述 众所周知,LLM的算法之所以菜,就是因为成天打游戏,最近LLM突然想玩<金庸群侠传X>,结果进去后各种被虐,LLM就开始研究这个游戏的代码,顺便还学会了一点点点点lua语言,然后就开始了伟大的改游戏代码之旅,然后LLM发现自己too young了,这个游戏把所有的文本都进行了哈希,如果自己改了代码或者剧情文本的话它哈希出来的值就会和原来的哈希值不一样......然后游戏就会打不开.....,现在LLM发现了文本的哈希函数,要求你写个程序,功能为: 输入一段字符串,输出一个哈希值 为了

爬虫——模拟点击动态页面

动态页面的模拟点击: 以斗鱼直播为例:http://www.douyu.com/directory/all 爬取每页的房间名.直播类型.主播名称.在线人数等数据,然后模拟点击下一页,继续爬取 #!/usr/bin/python3 # -*- conding:utf-8 -*- __author__ = 'mayi' """ 动态页面的模拟点击: 模拟点击斗鱼直播:http://www.douyu.com/directory/all 爬取每页房间名.直播类型.主播名称.在线人数

爬虫——网站模拟登录

使用Selenium与PhantomJS模拟登录豆瓣:https://www.douban.com/ #!/usr/bin/python3 # -*- conding:utf-8 -*- __author__ = 'mayi' """ 模拟登录豆瓣:https://www.douban.com/ """ from selenium import webdriver # 调用环境变量指定的PhantomJS浏览器创建浏览器对象,executable

python爬虫 模拟登陆校园网-初级

最近跟同学学习爬虫的时候看到网上有个帖子,好像是山大校园网不稳定,用py做了个模拟登陆很有趣,于是我走上了一条不归路..... 先上一张校园网截图 首先弄清一下模拟登陆的原理: 1:服务器判定浏览器登录使用浏览器标识,需要模拟登陆 2: 需要post账号,密码,以及学校id python走起,我用的2.7版本,用notepad++写的,绑定python可以直接运行 由于是模拟网页登陆,需要导入urllib urllib2 cookielib库,前两个有与网页直接的接口,cookielib就是用来

Android模拟位置信息

Android模拟位置程序,俗称GPS欺骗,只能修改采用GPS定位的软件. 手机定位方式目前有4种:基站定位,WIFI定位,GPS定位,AGPS定位 常见的修改手法: 1. 抓包欺骗法,抓包改包欺骗服务器端, 但是得专门去针对某款app,而且现在很多app数据包都加密了 2. hook java层经纬度获取函数, 这个方法以前可以用,现在不行了 3. hook native层经纬度获取函数 4. 使用允许模拟地址位置信息(不是很通用有版本限制) 为了修改微信朋友圈地理位置信息,为了好玩 试过了上

CSU 1112: 机器人的指令【模拟题】

1112: 机器人的指令 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 1858  Solved: 682 [Submit][Status][Web Board] Description 数轴原点有一个机器人.该机器人将执行一系列指令,你的任务是预测所有指令执行完毕之后它的位置. ·LEFT:往左移动一个单位 ·RIGHT: 往右移动一个单位 ·SAME AS i: 和第i 条执行相同的动作.输入保证i 是一个正整数,且不超过之前执行指令数 In