`
mayi_hetu
  • 浏览: 15582 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

poj2632模拟法

    博客分类:
  • poj
阅读更多

/*

模拟机器人在方格中运动,判断是否会发生碰撞

题目的思路挺简单的,需要注意方格的表示和语言中矩阵的表示的区别,判断行进的位置

 做这道题目是还理解了一下C结构体中数据的内存对齐问题,在定义结构体是最好是遵守字节对齐原则,

简单说就是长字节的先定义,这样可以节省一些空间

 */

#include<stdio.h>
#include<string.h>

#define MAX 130

char m[MAX][MAX];
struct Robot
{
 int x;
 int y;
 int d;
}r[MAX];


int main()
{
 int K,A,B,N,M;
 int i,j,pos,repeat,flag,p,x,y;
 char ch;
 freopen("data","r",stdin);
 scanf("%d",&K);
 for(i=0;i<K;++i)
 {
  memset(m,0,sizeof(m)); 
  scanf("%d%d",&A,&B);
  scanf("%d%d",&N,&M);
  for(j=1;j<=N;++j)
  {
   scanf("%d %d %c",&r[j].x,&r[j].y,&ch);
   switch(ch)
   {
    case 'E':r[j].d=0;break;
    case 'N':r[j].d=1;break;
    case 'W':r[j].d=2;break;
    case 'S':r[j].d=3;break;
   }
   m[ r[j].x ][ r[j].y ]=j;
  }
  flag = 0;
  for(j=0;j<M;++j)
  {
   scanf("%d %c %d",&pos,&ch,&repeat);
   if(!flag)
   switch(ch)
   {
    case 'L':r[pos].d = (r[pos].d+repeat)%4;
       break;
    case 'R':r[pos].d = (r[pos].d+3*repeat)%4;
       break;
    case 'F':
       switch(r[pos].d)
       {
        case 0:x=1;y=0;break;
        case 1:x=0;y=1;break;
        case 2:x=-1;y=0;break;
        case 3:x=0;y=-1;break;
       }
       for(p=0;p<repeat;++p)
       {
        m[ r[pos].x ][ r[pos].y ]=0;
        r[pos].x+=x;
        r[pos].y+=y;
        if(r[pos].x<1 || r[pos].x>A || r[pos].y<1 || r[pos].y>B)
        {
         printf("Robot %d crashes into the wall\n",pos);
         flag=1;
         break;
        }else if(m[ r[pos].x ][ r[pos].y ]!=0)
        {
         printf("Robot %d crashes into robot %d\n",pos,m[ r[pos].x ][ r[pos].y ]);
        flag =1;
        break;
        }else
        {
         m[ r[pos].x ][ r[pos].y ] = pos;
        }
       }
       break;
   }
  }
  if(!flag)
  {
   printf("OK\n");
  }

 }


}

分享到:
评论

相关推荐

    POJ算法题目分类

    * 模拟法:模拟法是指通过模拟问题的过程来解决问题的方法,如 poj1068、poj2632、poj1573、poj2993、poj2996。 二、图算法 图算法是指解决图相关问题的算法,包括图的深度优先遍历和广度优先遍历、最短路径算法...

    poj题目分类

    * 模拟法:通过模拟问题的过程来解决问题,例如 poj1068、poj2632、poj1573、poj2993、poj2996。 2. 图算法: * 图的深度优先遍历和广度优先遍历:例如 poj1860、poj3259、poj1062、poj2253、poj1125、poj2240。 ...

    poj训练计划.doc

    - 模拟法:按照题目描述的规则进行操作,直至得到结果,如`poj1068, poj2632, poj1573`。 - **图算法** - 图的深度优先遍历和广度优先遍历:用于探索图的所有节点,如`poj1860, poj3259`。 - 最短路径算法:如...

    poj各种分类

    模拟法是对题目场景的直接模拟,适用于逻辑清晰、规则明确的问题,如poj1068和poj2632。虽然这种方法直观易懂,但在复杂度较高的情况下,效率可能不如更高级的算法。 ### 二、图算法 #### 图的遍历 包括深度优先...

    POJ题目简单分类(ACM)

    - **模拟法**:按照题目描述的逻辑进行编程模拟,如poj1068、poj2632等。 2. **图算法**: - **深度优先遍历和广度优先遍历**:是图的基本操作,用于搜索图的所有节点。 - **最短路径算法**:包括dijkstra、...

    acm poj300题分层训练

    1. **基本算法**:包括枚举、贪心、分治法、递推、模拟法等。如poj1753、poj2965用于枚举训练,poj1328、poj2109、poj2586是贪心策略的实例,poj2506和poj3295涉及分治法,poj1068、poj2632等则用于模拟训练。 2. **...

    acm训练计划(poj的题)

    - (poj1068, poj2632, poj1573, poj2993, poj2996):动态规划是一种通过分解问题为子问题,并将子问题的结果存储起来避免重复计算的方法。 ### 二、图论 1. **图的基本概念**: - 图的基本定义及其相关的术语...

    POJ 我收集的解题报告(100多道)

    8. **模拟法**:按照题目描述进行程序设计,模拟实际情况。 9. **编码技巧**:如位操作、动态类型、模板等,以提高代码效率或简洁性。 这些解题报告不仅可以帮助初学者逐步建立对算法的理解,提升编程技能,对于...

    poj 百练 题目分类

    在 POJ 百练 题目分类中,高精度计算类题目包括大整数加法(2981)、大整数乘法(2980)、大整数除法(2737)、麦森数(2706)、计算 2 的 N 次方(2809)、浮点数加法(2738)、孙子问题(2793)、浮点数求高精度幂...

    POJ1840-Eqs

    8. **模拟**:有些题目可能需要编写程序来模拟现实世界的某些过程,例如模拟游戏规则或物理现象。 9. **位运算**:对于效率要求高的题目,位运算技巧可以提高代码运行速度。 10. **记忆化搜索**:当动态规划问题...

    POJ 分类题目

    - **定义**:模拟法是对现实世界的系统或过程进行建模,并对其进行仿真的方法。 - **示例题目**: - poj1068 - poj2632 - poj1573 - poj2993 - poj2996 - poj1255 - poj1009 - **应用场景**:适用于模拟物理...

    POJ上一些已经AC的代码

    9. **模拟法**:对于某些特定问题,直接模拟题目描述的过程以得出答案。 10. **优化技巧**:包括代码优化、内存管理、IO流优化,以满足POJ的运行时间和空间限制。 通过研究这些已AC的代码,我们可以了解各种问题的...

    poj acm300题 c++源码打包

    2. **高级算法**:如回溯法、分支限界法、贪心算法、模拟退火、遗传算法等。 3. **数据结构**:链表、栈、队列、树(二叉树、平衡树、B树、Trie树等)、图、哈希表、堆等。 4. **数学知识**:组合数学、数论、线性...

    ACM常用算法及其相应的练习题.docx

    * 模拟法:poj1068, poj2632, poj1573, poj2993, poj2996 二、图算法 * 图的深度优先遍历和广度优先遍历 * 最短路径算法:dijkstra, bellman-ford, floyd, heap+dijkstra + poj1860, poj3259, poj1062, poj2253, ...

    ACM 比赛 POJ的训练计划,,,非常不错,关键在于坚持

    第十四类是模拟,涵盖了至少五个题目,包括 1029 和 1013 等题目。 第十五类是数学,涵盖了至少四个题目,包括 2249 和 1056 等题目。 此外,该计划还提供了一些水题供选手练习和提高自信心,如 POJ3299、POJ2159 ...

    Poj3254.rar_poj3254

    9. **模拟法**:有些问题可以通过直接模拟过程来求解,如模拟物理现象、模拟比赛策略等。 由于没有具体题目内容,以上只是对可能涉及知识点的广泛推测。实际的解题过程会根据题目要求具体化,通过阅读解题代码和...

    POJ部分题解

    9. **模拟与建模**:一些题目可能需要对实际问题进行抽象和建模,然后编写程序进行模拟,例如模拟交通流、模拟物理过程等。 10. **递归与分治**:递归是解决问题的一种自然方式,而分治则是将大问题划分为小问题,...

    c++ npu poj答案100道全

    6. 回溯法:在解决问题时,回溯法用于尝试所有可能的解决方案,如八皇后问题、数独问题等。 四、数据结构 1. 数组:基本的数据结构,用于存储相同类型的数据。 2. 链表:节点间通过指针连接,便于插入和删除操作。 ...

    POJ_keptsl6_C++_

    10. 7113.cpp:可能与递归或回溯法有关,比如八皇后问题、N皇后问题等。 这些cpp文件代表了不同类型的算法问题,涵盖了从基础数据结构(如数组、链表)到高级算法(如动态规划、搜索算法)的广泛知识。在学习这些...

Global site tag (gtag.js) - Google Analytics