zoukankan      html  css  js  c++  java
  • hdu 4452 37届金华赛区 K题

    题意:给一个n*n的格子,1在左上角,2在右下角,每个人有一个初始速度和方向,若遇到边缘,则朝相反方向前进,若两个人相遇则交换方向(注意方向改变后,人仍然需要移动),同时,每个人每过t1,t2时间就会朝左转向,求K秒时那个人所在的方向

    模拟,看起来比较麻烦,实际写起来还是比较好写的

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<queue>
     6 #include<map>
     7 using namespace std;
     8 #define MOD 1000000007
     9 const double eps=1e-5;
    10 #define cl(a) memset(a,0,sizeof(a))
    11 #define ts printf("*****
    ");
    12 const int MAXN=1005;
    13 int n,m,tt,K,v1,v2;
    14 int dir1,dir2,t1,t2;  //0北,1西,2南,3东
    15 int x1,y1;
    16 int x2,y2;
    17 void fun(int t)
    18 {
    19     if(x1==x2&&y1==y2)  swap(dir1,dir2);
    20     else
    21     {
    22         if(t!=0&&t%t1==0)    dir1+=1,dir1%=4;
    23         if(t!=0&&t%t2==0)    dir2+=1,dir2%=4;
    24     }
    25 
    26     for(int i=0;i<v1;i++)
    27     {
    28         if(dir1==0&&x1==1)dir1=2;
    29         if(dir1==1&&y1==1)dir1=3;
    30         if(dir1==2&&x1==n)dir1=0;
    31         if(dir1==3&&y1==n)dir1=1;
    32 
    33         if(dir1==0)x1--;
    34         else if(dir1==1)y1--;
    35         else if(dir1==2)x1++;
    36         else y1++;
    37     }
    38     for(int i=0;i<v2;i++)
    39     {
    40         if(dir2==0&&x2==1)dir2=2;
    41         if(dir2==1&&y2==1)dir2=3;
    42         if(dir2==2&&x2==n)dir2=0;
    43         if(dir2==3&&y2==n)dir2=1;
    44 
    45         if(dir2==0)x2--;
    46         else if(dir2==1)y2--;
    47         else if(dir2==2)x2++;
    48         else y2++;
    49     }
    50 }
    51 int main()
    52 {
    53     int i,j,k;
    54     #ifndef ONLINE_JUDGE
    55     freopen("1.in","r",stdin);
    56     #endif
    57     while(scanf("%d",&n)!=EOF)
    58     {
    59         if(n==0)    break;
    60         char di[5];
    61         x1=1,y1=1;
    62         x2=n,y2=n;
    63 
    64 
    65         scanf("%s%d%d",di,&v1,&t1);
    66         if(di[0]=='N')  dir1=0;
    67         else if(di[0]=='W')  dir1=1;
    68         else if(di[0]=='S')  dir1=2;
    69         else dir1=3;
    70 
    71 
    72         scanf("%s%d%d",di,&v2,&t2);
    73         if(di[0]=='N')  dir2=0;
    74         else if(di[0]=='W')  dir2=1;
    75         else if(di[0]=='S')  dir2=2;
    76         else dir2=3;
    77 
    78 
    79         scanf("%d",&K);
    80         for(i=0;i<K;i++)
    81         {
    82             fun(i);  //每秒钟的运动情况
    83         }
    84         printf("%d %d
    ",x1,y1);
    85         printf("%d %d
    ",x2,y2);
    86     }
    87 }
  • 相关阅读:
    Python循环语句
    Python判断语句
    MySQL的基本操作汇总
    Python函数、类
    Python字典、集合
    Python列表、元组
    python数据类型--数字、字符串
    Python基础认识
    搭建Python独立虚拟环境
    Python包管理工具
  • 原文地址:https://www.cnblogs.com/cnblogs321114287/p/4437723.html
Copyright © 2011-2022 走看看