Uva10881
2016-01-26 16:01
405 查看
#include <algorithm> #include <cstdio> using namespace std; typedef struct ant { int position;//表示位置,距离左端的距离 char direction;//表示方向 int number;//表示编号,即输入的顺序 int flag;//表示蚂蚁的状态,-1表示掉下去,0表示Turning,1正常 }ants; //定义sort的比较函数,小于号表示从小到大排列,按照结构体内的position来比较 bool compare1(ants A,ants B) { return A.position<B.position; } //定义sort的比较函数,小于号表示从小到大排列,按照结构体内的number来比较 bool compare2(ants A,ants B) { return A.number<B.number; } int main() { int count,Case=1;//数据组数,case用来表示输出的组数,case为1表示输出第一组 scanf("%d",&count); while(count--) { int L,T,n;//木杆长度,间隔时间,蚂蚁个数 scanf("%d%d%d",&L,&T,&n); ants *a=new ants ;//蚂蚁数组 int *ns=new int ;//记录编号顺序 //读入每只蚂蚁的初始位置,方向,并标记它们的读入顺序 for(int i=0;i<n;i++) { scanf("%d %c",&a[i].position,&a[i].direction); a[i].number=i; } //第一次排序,按照位置排序 sort(a,a+n,compare1); //因为不管中间蚂蚁是否因为相撞而调转方向,最终的相对位置都一样,所以,这里直接移动每一只蚂蚁的位置 for(int i=0;i<n;i++) { ns[i]=a[i].number;//记录下第一次排序后的编号顺序 if(a[i].direction=='L') a[i].position-=T; else a[i].position+=T; } //第二次排序,将移动后的新的蚂蚁位置进行排序 sort(a,a+n,compare1); //将记录的编号顺序重新赋给第二次排序后的蚂蚁 for(int i=0;i<n;i++) { a[i].number=ns[i]; } //判断蚂蚁是否掉落,掉落用-1表示,否则全部用1表示 for(int i=0;i<n;i++) { if(a[i].position<0||a[i].position>L)//第一次出错是因为忘记判断小于0的情况 a[i].flag=-1; else a[i].flag=1; } //判断蚂蚁是否相撞,相撞用0表示 for(int i=0;i<n-1;i++) for(int j=0;j<n;j++) { if(a[i].position==a[j].position&&a[i].direction!=a[j].direction) { a[i].flag=0; a[j].flag=0; } } //按照编号进行第三次排序 sort(a,a+n,compare2); printf("Case #%d:\n",Case++); //进行输出 for(int i=0;i<n;i++) { if(a[i].flag==-1) printf("Fell off\n"); else if(a[i].flag==0) printf("%d Turning\n",a[i].position); else printf("%d %c\n",a[i].position,a[i].direction); } printf("\n"); } return 0; }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C++联合体转换成C#结构的实现方法
- C#实现的算24点游戏算法实例分析
- C++高级程序员成长之路
- C++编写简单的打靶游戏