HDU4452Running Rabbits(模拟)

题目链接

题目大意:给N?N的格子,然后有两只兔子分别在(1,1)和(N,
N)上。现在给这两只兔子一个出发方向,和每秒跳跃格子数和每过t秒方向就向左转这些条件。如果这只兔子跳到一定的步数碰到了墙壁,没法往那个方向跳了,那么就回头继续将剩余的步数跳完(这一点我之前没理解。。弄了半天)。如果两只兔子在k点的时候在同个一个位置上,那么这两只兔子就互换方向,这时候如果正好需要向左转,就不需要向左转。

解题思路:模拟,就是需要弄清除题意,先跳再换方向,如果碰到一起的话那么就不需要换方向了,还有碰到墙壁的时候的情况也要考虑清楚。

代码:

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

int N, T;
const int dir[4][2] = {{-1, 0}, {0, -1}, {1, 0}, {0, 1}};

struct Rabbit {
    int d, s, t;
    int x, y;
}r[2];

int change (char ch) {

    if (ch == ‘N‘)
        return 0;
    else if (ch == ‘W‘)
        return 1;
    else if (ch == ‘S‘)
        return 2;
    else
        return 3;
}

void jumpe (int i) {

    int nx = r[i].x + r[i].s * dir[r[i].d][0];
    int ny = r[i].y + r[i].s * dir[r[i].d][1];

    if (nx > 0 && nx <= N && ny > 0 && ny <= N) {
        r[i].x = nx;
        r[i].y = ny;
    } else {

        if (r[i].d == 0)
            r[i].x += r[i].s - 2 * (r[i].x - 1);
        else if (r[i].d == 1)
            r[i].y += r[i].s - 2 * (r[i].y - 1);
        else if (r[i].d == 2)
            r[i].x -= r[i].s - 2 * (N - r[i].x);
        else
            r[i].y -= r[i].s - 2 * (N - r[i].y);

        r[i].d = (r[i].d + 2) % 4;
    }
}

int main () {

    char str[10];
    while (scanf ("%d", &N) && N ) {

        scanf ("%s%d%d", str, &r[0].s, &r[0].t);
        r[0].d = change(str[0]);
        scanf ("%s%d%d", str, &r[1].s, &r[1].t);
        r[1].d = change(str[0]);
        r[0].x = r[0].y = 1;
        r[1].x = r[1].y = N;
        scanf ("%d", &T);

        for (int i = 1; i <= T; i++) {

            jumpe(0);
            jumpe(1);

//            printf ("%d %d\n%d %d\n", r[0].x, r[0].y, r[1].x, r[1].y);
            if (r[0].x == r[1].x && r[0].y == r[1].y)
                swap(r[0].d, r[1].d);
            else {
                if ((i % r[0].t == 0))
                    r[0].d = (r[0].d + 1) % 4;
                if ((i % r[1].t == 0))
                    r[1].d = (r[1].d + 1) % 4;
            }

        }

        printf ("%d %d\n%d %d\n", r[0].x, r[0].y, r[1].x, r[1].y);
    }
    return 0;
}
时间: 2024-10-10 09:19:32

HDU4452Running Rabbits(模拟)的相关文章

hdu 4452 Running Rabbits 模拟

Running RabbitsTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1344    Accepted Submission(s): 925 Problem DescriptionRabbit Tom and rabbit Jerry are running in a field. The field is an N×N grid

模拟 HDOJ 4552 Running Rabbits

题目传送门 1 /* 2 模拟:看懂题意,主要是碰壁后的转向,笔误2次 3 */ 4 #include <cstdio> 5 #include <algorithm> 6 #include <cstring> 7 #include <vector> 8 using namespace std; 9 10 const int MAXN = 1e3 + 10; 11 const int INF = 0x3f3f3f3f; 12 struct Rabbit 13

HDU4452——模拟——Running Rabbits

Rabbit Tom and rabbit Jerry are running in a field. The field is an N×N grid. Tom starts from the up-left cell and Jerry starts from the down-right cell. The coordinate of the up-left cell is (1,1) and the coordinate of the down-right cell is (N,N).A

[模拟] hdu 4452 Running Rabbits

题意: 两个人一个人在(1,1),一个人在(N,N) 给每个人每秒移动的速度v,和一个s代表移动s秒后左转方向 特别注意的是如果撞墙,要反弹回去,方向改变 比如在(1,1),往左走一步到(1,0) 其实就是走到了(1,2) 然后如果两个人见面那么交换方向并且不再左转! 思路: 直接模拟.. 代码: #include"cstdlib" #include"cstdio" #include"cstring" #include"cmath&qu

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发现了文本的哈希函数,要求你写个程序,功能为: 输入一段字符串,输出一个哈希值 为了

04 Rabbits and Recurrence Relations

Problem A sequence is an ordered collection of objects (usually numbers), which are allowed to repeat. Sequences can be finite or infinite. Two examples are the finite sequence (π,−2–√,0,π)(π,−2,0,π) and the infinite sequence of odd numbers (1,3,5,7,

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

动态页面的模拟点击: 以斗鱼直播为例: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