UVA.10881 Piotr's Ants (思维题)
来源:互联网 发布:oracle 实例端口 编辑:程序博客网 时间:2024/05/16 17:56
UVA.10881 Piotr’s Ants (思维题)
题意分析
有一根长度为L cm的木棍,上有n只蚂蚁,蚂蚁要么向左爬,要么向右,速度均为1cm/s,若2只蚂蚁相撞,则蚂蚁同时调头。求解第T秒时这n只蚂蚁的状态。
若此时相撞 输出:Turning
若此时已经掉下木棍 输出:Fell off
且要按照输入时的顺序输出各个蚂蚁的状态
此题难点有2个:
1.其实相撞可以理解为交叉走过(因为速度相同)。
2.蚂蚁的相对位置保持不变。
想明白了这两点,难点就转换成了:
1.如何确定蚂蚁的位置;
2.如何处理好蚂蚁的状态。
解决方法如下:
1.首先要按照输入的顺序,给蚂蚁编上号,即ini;
2.给这n只蚂蚁按照从左向右的顺序(即pos升序)排序,并且将其ini写入loca数组。(可以理解为ini是每个蚂蚁的ID,由ini来确认每个蚂蚁的身份)。
3.模拟每只蚂蚁的移动。(利用相撞即交叉走过的原则)。
4.按照移动完的顺序,接着依照pos升序排序。
5.按照loca数组,依次改写从左向右每只蚂蚁的ini(利用的相对位置不变的原则)。
6.按照题目要求输出即可。
代码总览
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#define nmax 10005using namespace std;struct ant{ int pos,dir,ord,ini;}a[nmax];int loca[nmax];bool cmp(ant x, ant y){ return x.pos<y.pos;}bool cmp1(ant x, ant y){ return x.ini<y.ini;}int main(){// freopen("in.txt","r",stdin);// freopen("out.txt","w",stdout); int cas = 0; const char *arr [] ={"L","Turning","R"}; int N; scanf("%d",&N); while(N--){ printf("Case #%d:\n",++cas); memset(a,0,sizeof(a)); memset(loca,0,sizeof(loca)); int L,T,n; scanf("%d%d%d",&L,&T,&n); for(int i = 0; i<n; ++i){ int p;char t; scanf("%d %c",&p,&t); a[i].pos = p; a[i].dir = (t == 'L'?-1:1); a[i].ini = i; } sort(a,a+n,cmp); for(int i = 0; i<n;++i){ loca[i] = a[i].ini; a[i].pos = a[i].pos + a[i].dir * T; } sort(a,a+n,cmp); for(int i = 0;i<n;++i){ a[i].ini = loca[i]; } for(int i = 0; i<n-1;++i) if(a[i].pos == a[i+1].pos) a[i].dir =a[i+1].dir = 0; sort(a,a+n,cmp1); for(int i = 0;i<n;++i){ if(a[i].pos<0 || a[i].pos>L) printf("Fell off\n"); else{ printf("%d %s\n",a[i].pos,arr[a[i].dir+1]); } } printf("\n"); } return 0;}
0 0
- UVA 10881 - Piotr's Ants(思维题)
- UVA 10881 Piotr's Ants(思维题)
- UVA.10881 Piotr's Ants (思维题)
- UVA 10881 Piotr's Ants (思维)
- Uva 10881 - Piotr's Ants( 转换思维 )
- UVa 10881Piotr's Ants【思维】
- UVa --- 10881 Piotr's Ants 【思维】
- UVa - 10881 Piotr's Ants(技巧题)
- uva 10881 - Piotr's Ants (思维,3级)
- Uva 10881 Piotr's Ants (模拟+思维)
- UVA 10881 - Piotr's Ants(思维转换)
- UVa - 10881 - Piotr's Ants
- uva 10881 - Piotr's Ants
- Uva-10881-Piotr's Ants
- uva 10881 - Piotr's Ants
- UVa 10881 Piotr's Ants
- UVA 10881 Piotr's Ants
- Piotr's ants UVA 10881
- jvisualvm 连linux下的应用程序(tomcat)
- JRE 和 JDK
- 关于模型抖动解决方案
- 北大 C++ 3.4 静态成员变量和静态成员函数
- WebGL学习系列-片元着色器简介
- UVA.10881 Piotr's Ants (思维题)
- 简易双人五子棋
- 数塔问题--经典的动态规划问题
- WPF中使用文件浏览对话框的几种方式
- 文章标题
- 虚机操作之launch instance日志跟踪
- 1000个赞的《快乐码农》期刊第 10 期
- javaScript的变量的数据类型判定
- 1057.Stack (30)...to be continued...