/*
模拟机器人在方格中运动,判断是否会发生碰撞
题目的思路挺简单的,需要注意方格的表示和语言中矩阵的表示的区别,判断行进的位置
做这道题目是还理解了一下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");
}
}
}
分享到:
相关推荐
* 模拟法:模拟法是指通过模拟问题的过程来解决问题的方法,如 poj1068、poj2632、poj1573、poj2993、poj2996。 二、图算法 图算法是指解决图相关问题的算法,包括图的深度优先遍历和广度优先遍历、最短路径算法...
* 模拟法:通过模拟问题的过程来解决问题,例如 poj1068、poj2632、poj1573、poj2993、poj2996。 2. 图算法: * 图的深度优先遍历和广度优先遍历:例如 poj1860、poj3259、poj1062、poj2253、poj1125、poj2240。 ...
- 模拟法:按照题目描述的规则进行操作,直至得到结果,如`poj1068, poj2632, poj1573`。 - **图算法** - 图的深度优先遍历和广度优先遍历:用于探索图的所有节点,如`poj1860, poj3259`。 - 最短路径算法:如...
模拟法是对题目场景的直接模拟,适用于逻辑清晰、规则明确的问题,如poj1068和poj2632。虽然这种方法直观易懂,但在复杂度较高的情况下,效率可能不如更高级的算法。 ### 二、图算法 #### 图的遍历 包括深度优先...
- **模拟法**:按照题目描述的逻辑进行编程模拟,如poj1068、poj2632等。 2. **图算法**: - **深度优先遍历和广度优先遍历**:是图的基本操作,用于搜索图的所有节点。 - **最短路径算法**:包括dijkstra、...
1. **基本算法**:包括枚举、贪心、分治法、递推、模拟法等。如poj1753、poj2965用于枚举训练,poj1328、poj2109、poj2586是贪心策略的实例,poj2506和poj3295涉及分治法,poj1068、poj2632等则用于模拟训练。 2. **...
- (poj1068, poj2632, poj1573, poj2993, poj2996):动态规划是一种通过分解问题为子问题,并将子问题的结果存储起来避免重复计算的方法。 ### 二、图论 1. **图的基本概念**: - 图的基本定义及其相关的术语...
8. **模拟法**:按照题目描述进行程序设计,模拟实际情况。 9. **编码技巧**:如位操作、动态类型、模板等,以提高代码效率或简洁性。 这些解题报告不仅可以帮助初学者逐步建立对算法的理解,提升编程技能,对于...
在 POJ 百练 题目分类中,高精度计算类题目包括大整数加法(2981)、大整数乘法(2980)、大整数除法(2737)、麦森数(2706)、计算 2 的 N 次方(2809)、浮点数加法(2738)、孙子问题(2793)、浮点数求高精度幂...
8. **模拟**:有些题目可能需要编写程序来模拟现实世界的某些过程,例如模拟游戏规则或物理现象。 9. **位运算**:对于效率要求高的题目,位运算技巧可以提高代码运行速度。 10. **记忆化搜索**:当动态规划问题...
- **定义**:模拟法是对现实世界的系统或过程进行建模,并对其进行仿真的方法。 - **示例题目**: - poj1068 - poj2632 - poj1573 - poj2993 - poj2996 - poj1255 - poj1009 - **应用场景**:适用于模拟物理...
9. **模拟法**:对于某些特定问题,直接模拟题目描述的过程以得出答案。 10. **优化技巧**:包括代码优化、内存管理、IO流优化,以满足POJ的运行时间和空间限制。 通过研究这些已AC的代码,我们可以了解各种问题的...
2. **高级算法**:如回溯法、分支限界法、贪心算法、模拟退火、遗传算法等。 3. **数据结构**:链表、栈、队列、树(二叉树、平衡树、B树、Trie树等)、图、哈希表、堆等。 4. **数学知识**:组合数学、数论、线性...
* 模拟法:poj1068, poj2632, poj1573, poj2993, poj2996 二、图算法 * 图的深度优先遍历和广度优先遍历 * 最短路径算法:dijkstra, bellman-ford, floyd, heap+dijkstra + poj1860, poj3259, poj1062, poj2253, ...
第十四类是模拟,涵盖了至少五个题目,包括 1029 和 1013 等题目。 第十五类是数学,涵盖了至少四个题目,包括 2249 和 1056 等题目。 此外,该计划还提供了一些水题供选手练习和提高自信心,如 POJ3299、POJ2159 ...
9. **模拟法**:有些问题可以通过直接模拟过程来求解,如模拟物理现象、模拟比赛策略等。 由于没有具体题目内容,以上只是对可能涉及知识点的广泛推测。实际的解题过程会根据题目要求具体化,通过阅读解题代码和...
9. **模拟与建模**:一些题目可能需要对实际问题进行抽象和建模,然后编写程序进行模拟,例如模拟交通流、模拟物理过程等。 10. **递归与分治**:递归是解决问题的一种自然方式,而分治则是将大问题划分为小问题,...
6. 回溯法:在解决问题时,回溯法用于尝试所有可能的解决方案,如八皇后问题、数独问题等。 四、数据结构 1. 数组:基本的数据结构,用于存储相同类型的数据。 2. 链表:节点间通过指针连接,便于插入和删除操作。 ...
10. 7113.cpp:可能与递归或回溯法有关,比如八皇后问题、N皇后问题等。 这些cpp文件代表了不同类型的算法问题,涵盖了从基础数据结构(如数组、链表)到高级算法(如动态规划、搜索算法)的广泛知识。在学习这些...