题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4452
题目大意:
在一张n*n的图中,两只兔子,兔子Tom从(1,1)出发,兔子Jerry从(n,n)出发.
一个clock,Tom可以跳ts步,Jerry可以跳js步,如果跳的时候碰到地图尽头那么就掉头跳.
Tom每跳tt个clock向左转,Jerry每跳jt个clock向左转,如果相遇,两兔互换方向,不左转(如果刚好到要左转的clock事).
题目思路:
纯模拟.
代码:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include <math.h>
#include <time.h>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
#define ll __int64
#define ls rt<<1
#define rs ls|1
#define lson l,mid,ls
#define rson mid+1,r,rs
#define middle l+r>>1
typedef pair<int,int> pii;
typedef multiset<int> mset;
typedef multiset<int>::iterator mst_it;
template <class T> T _max(T x,T y){return x>y? x:y;}
template <class T> T _min(T x,T y){return x<y? x:y;}
template <class T> void _swap(T &x,T &y){T z=x;x=y;y=z;}
template <class T> T GCD(T a,T b){for(T t;b;t=a%b,a=b,b=t);return a;}
template <class T> T LCM(T a,T b){return a/GCD(a,b)*b;}
#define clr_all(x,num) memset(x,num,sizeof(x))
#define clr(x,num,sz) memset(x,num,sizeof(x[0])*(sz+1))
#define inf 0x3F3F3F3F
#define eps (1e-9)
#define MOD 1000000007
const double pi=acos(-1.0);
const int M=20 +5;
int ts,cas=0;
int n,m,k;
int dir[4][2]={{-1,0},{0,-1},{1,0},{0,1}};
int lft[4]={1,2,3,0},op[4]={2,3,0,1};
char c[2];
int d[2],s[2],t[2];
struct node{
int x,y,d,cnt;
}p[2];
void run(){
int i,j;
p[0].x=p[0].y=1;
p[1].x=p[1].y=n;
for(i=0;i<2;i++){
scanf("%s%d%d",c,&s[i],&t[i]);
switch(c[0]){
case 'N':p[i].d=d[i]=0;break;
case 'W':p[i].d=d[i]=1;break;
case 'S':p[i].d=d[i]=2;break;
case 'E':p[i].d=d[i]=3;break;
}
p[i].cnt=0;
}
scanf("%d",&k);
int x,y,ss;
while(k--){
for(i=0;i<2;i++){
p[i].cnt++;
if(dir[p[i].d][0]){
x=p[i].x+dir[p[i].d][0]*s[i];
if(x<1){
ss=p[i].x-1;
p[i].d=op[p[i].d];
p[i].x=1+dir[p[i].d][0]*(s[i]-ss);
}else if(x>n){
ss=n-p[i].x;
p[i].d=op[p[i].d];
p[i].x=n+dir[p[i].d][0]*(s[i]-ss);
}else p[i].x=x;
}else{
y=p[i].y+dir[p[i].d][1]*s[i];
if(y<1){
ss=p[i].y-1;
p[i].d=op[p[i].d];
p[i].y=1+dir[p[i].d][1]*(s[i]-ss);
}else if(y>n){
ss=n-p[i].y;
p[i].d=op[p[i].d];
p[i].y=n+dir[p[i].d][1]*(s[i]-ss);
}else p[i].y=y;
}
}
if(p[0].x==p[1].x && p[0].y==p[1].y) _swap(p[0].d,p[1].d);
else for(i=0;i<2;i++) if(p[i].cnt%t[i]==0) p[i].d=lft[p[i].d];
}
for(i=0;i<2;i++)
printf("%d %d\n",p[i].x,p[i].y);
}
void preSof(){
}
int main(){
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
preSof();
//run();
while(~scanf("%d",&n) && n) run();
//for(scanf("%d",&ts),cas=1;cas<=ts;cas++) run();
return 0;
}