2013杭州网络赛C题HDU 4640(模拟)
The Donkey of Gui Zhou
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 389 Accepted Submission(s): 153
The donkey lived happily until it saw a tiger far away. The donkey had never seen a tiger ,and the tiger had never seen a donkey. Both of them were frightened and wanted to escape from each other. So they started running fast. Because they were scared, they were running in a way that didn't make any sense. Each step they moved to the next cell in their running direction, but they couldn't get out of the forest. And because they both wanted to go to new places, the donkey would never stepped into a cell which had already been visited by itself, and the tiger acted the same way. Both the donkey and the tiger ran in a random direction at the beginning and they always had the same speed. They would not change their directions until they couldn't run straight ahead any more. If they couldn't go ahead any more ,they changed their directions immediately. When changing direction, the donkey always turned right and the tiger always turned left. If they made a turn and still couldn't go ahead, they would stop running and stayed where they were, without trying to make another turn. Now given their starting positions and directions, please count whether they would meet in a cell.
In each test case:
First line is an integer N, meaning that the forest is a N×N grid.
The second line contains three integers R, C and D, meaning that the donkey is in the cell (R,C) when they started running, and it's original direction is D. D can be 0, 1, 2 or 3. 0 means east, 1 means south , 2 means west, and 3 means north.
The third line has the same format and meaning as the second line, but it is for the tiger.
The input ends with N = 0. ( 2 <= N <= 1000, 0 <= R, C < N)
0 0 0
0 1 2
4
0 1 0
3 2 0
0
1 3
感想
:现在才发现当时自己把题目读复杂了,怪不得自己搞了半天最后还是WA了。题意是王道,题意理解错了都是扯淡。好在我看见这个模拟水题之后想到了以前做的那两个兔子的模拟,和吉吉说了下,吉吉后来拿了一血,虽然不早,但毕竟是一血。
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std; int dir[4][2]= //往东南西北四个方向
{
{0,1},{1,0},{0,-1},{-1,0}
};
int visidon[1005][1005];
int visitig[1005][1005]; int main()
{
int n,i,j;
int donx,dony,tigx,tigy,pdon,ptig;
while(scanf("%d",&n)&&n)
{
memset(visidon,0,sizeof(visidon));
memset(visitig,0,sizeof(visitig));
scanf("%d%d%d",&donx,&dony,&pdon); //驴子的坐标与方向
scanf("%d%d%d",&tigx,&tigy,&ptig); //老虎的坐标与方向
visidon[donx][dony]=1;
visitig[tigx][tigy]=1;
int flag=0;
int fla1=0,fla2=0;//代表驴子和老虎不能转向
if(donx==tigx&&dony==tigy) //开始就在一起,直接输出
{
cout<<donx<<" "<<dony<<endl;
continue;
}
else
{
while(1)
{
if(fla1&&fla2)
{
break;
}
int cx1,cy1,cx2,cy2;
cx1=donx,cy1=dony,cx2=tigx,cy2=tigy;
if(!fla1) //驴子还可以走
{
cx1=donx+dir[pdon][0];
cy1=dony+dir[pdon][1];
}
if(!fla2) //老虎还可以走
{
cx2=tigx+dir[ptig][0];
cy2=tigy+dir[ptig][1];
} if(!fla1) //驴子还可以走
{
if(cx1>=0&&cx1<n&&cy1>=0&&cy1<n&&!visidon[cx1][cy1]) //可以沿着方向走
{
donx=donx+dir[pdon][0];
dony=dony+dir[pdon][1];
visidon[donx][dony]=1;
//cout<<"驴子:"<<donx<<" "<<dony<<endl;
}
else //转了一次方向
{
pdon=(pdon+1+4)%4;
cx1=donx+dir[pdon][0];
cy1=dony+dir[pdon][1];
if(cx1>=0&&cx1<n&&cy1>=0&&cy1<n&&!visidon[cx1][cy1]) //可以沿着方向走
{
donx=donx+dir[pdon][0];
dony=dony+dir[pdon][1];
visidon[donx][dony]=1;
//cout<<"驴子:"<<donx<<" "<<dony<<endl;
}
else
fla1=1;
//转了一次方向还是不能走,那就停下来
}
} if(!fla2) //老虎还可以走
{
if(cx2>=0&&cx2<n&&cy2>=0&&cy2<n&&!visitig[cx2][cy2])
{
tigx=tigx+dir[ptig][0];
tigy=tigy+dir[ptig][1];
visitig[tigx][tigy]=1;
//cout<<"老虎:"<<tigx<<" "<<tigy<<endl;
}
else
{
ptig=(ptig-1+4)%4;
cx2=tigx+dir[ptig][0];
cy2=tigy+dir[ptig][1];
if(cx2>=0&&cx2<n&&cy2>=0&&cy2<n&&!visitig[cx2][cy2])
{
tigx=tigx+dir[ptig][0];
tigy=tigy+dir[ptig][1];
visitig[tigx][tigy]=1;
//cout<<"老虎:"<<tigx<<" "<<tigy<<endl;
}
else
fla2=1;
}
}
if(donx==tigx&&dony==tigy) //说明撞在一起
{
flag=1;
break;
}
}
if(!flag)
puts("-1");
else
{
printf("%d %d\n",donx,dony);
}
}
}
return 0;
}
2013杭州网络赛C题HDU 4640(模拟)的更多相关文章
- 2013杭州网络赛D题HDU 4741(计算几何 解三元一次方程组)
Save Labman No.004 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- HDU 4738 Caocao's Bridges (2013杭州网络赛1001题,连通图,求桥)
Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU 4747 Mex (2013杭州网络赛1010题,线段树)
Mex Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Submis ...
- HDU 4741 Save Labman No.004 (2013杭州网络赛1004题,求三维空间异面直线的距离及最近点)
Save Labman No.004 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- HDU 4739 Zhuge Liang's Mines (2013杭州网络赛1002题)
Zhuge Liang's Mines Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- HDU 4745 Two Rabbits (2013杭州网络赛1008,最长回文子串)
Two Rabbits Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Tota ...
- HDU 4762 Cut the Cake (2013长春网络赛1004题,公式题)
Cut the Cake Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- HDU 4768 Flyer (2013长春网络赛1010题,二分)
Flyer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- HDU 4758 Walk Through Squares (2013南京网络赛1011题,AC自动机+DP)
Walk Through Squares Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Oth ...
随机推荐
- protobuf 中的嵌套消息的使用
protobuf的简单的使用,不过还留下了一个问题,那就是之前主要介绍的都是对简单数据的赋值,简单数据直接采用set_xx()即可,但是如果不是简单变量而是自定义的复合类型变量,就没有简单的set函数 ...
- JS 在html中的位置
前言 当我了解完html在浏览器中的解析渲染流程后,反而又发现了新的困扰自己的问题. Q:即然html要渲染需要渲染树,而渲染树又需要DOMTree和CSSRuleTree,DOMTree需要解析HT ...
- html文件引入其它html文件的几种方法:include方式
可以在一个html的文件当中读取另一个html文件的内容吗?答案是确定的,而且方法不只一种,在以前我只会使用iframe来引用,后来发现了另外的几种方法,那今天就总结这几种方法让大家参考一下. 1.I ...
- JS提取URL中的参数
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> ...
- 数组有没有 length()这个方法? String 有没有 length()这 个方法?
1.数组中有length属性. 2.String有lenth()方法.
- Problem B The Blocks Problem(vector的使用)
题目链接:Problem B 题意:有n块木块,编号为0~n-1,要求模拟以下4种操作(下面的a和b都是木块编号) 1. move a onto b: 把a和b上方的木块全部归位,然后把a摞在b上面. ...
- ubuntu下使用codeblocks
集成开发环境搭建 1. 安装build-essential 方法: sudo apt-get install build-essential 作用:提供编译程序必须软件包的列表信息,编译程序有了这个软 ...
- mysql修改用户名和密码
修改用户名 mysql> use mysql; 选择数据库Database changedmysql> update user set user="dns" wher ...
- FastJson中@JSONField注解使用
最近做项目中,使用了json格式在服务器之间进行数据传输.但是发现json格式数据不符合JAVA中的变量定义规则,并且难以理解,因此需要在后台中做二次处理,将数据处理成我们系统中定义的格式. 思路: ...
- android 构建数据库SQLite
1.首先我们需要一个空白的eclipse android工程 2.然后修改AndroidManifest.xml 在<application></application>标签里 ...