1456. [UVa 10881,Piotr's Ants]蚂蚁

★   输入文件:Ants.in   输出文件:Ants.out   简单对比
时间限制:1 s   内存限制:128 MB

【题目描述】

【输入格式】

【输出格式】

对于每组数据,输出n(Case #n:),按输入顺序输出每只蚂蚁的位置和朝向(Turning表示正在碰撞)。在T秒之前已经掉落的蚂蚁(正好爬到边缘不算)输出Fell off

【样例输入】

2 10 1 4 1 R 5 R 3 L 10 R 10 2 3 4 R 5 L 8 R

【样例输出】

Case #1: 2 Turning 6 R 2 Turning Fell off Case #2: 3 L 6 R 10 R

【来源】

UVa 10881,Piotr's Ants

思路:

  假设你在远处观察这些蚂蚁的运动,会看到什么?一群密密麻麻的小黑点在移动。由于黑点太小,所以当蚂蚁一碰撞而掉头时,看上去和两个点”对穿而过“没有什么区别。换句话说,如果把蚂蚁看做是没有区别的小点,那么只需要计算出每只蚂蚁在T时刻的位置即可。比如,有3只蚂蚁,蚂蚁1=(1,R),蚂蚁2=(3,L),蚂蚁3=(4,L),则两秒之后,三只蚂蚁分别为(3,R),(1,L)和(2,L)。

  注意,虽然从整体上讲,”掉头“等价于”对穿而过“,但对于每只蚂蚁而言,并不是这样。蚂蚁1的初始状态为(1,R),因此一定有一只蚂蚁在两秒钟之后处于(3,R)的状态,但这只蚂蚁却不一定是蚂蚁1.换句话说,我们需要搞清楚目标状态中的”谁是谁“。

  可以想象一下,所有蚂蚁的相对顺序是保持不变的。然后这个问题就很好解决了。

这是代码:

#include<map>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 10001
using namespace std;
map<int,int>vis;
int T;
int len,t,n,num;
struct nond{int pos,turn,id;
}v[MAXN],vv[MAXN];
int cmp(nond a,nond b){return a.pos<b.pos;
}
int cmp1(nond a,nond b){return a.id<b.id;
}
int main(){freopen("Ants.in","r",stdin);freopen("Ants.out","w",stdout);scanf("%d",&T);for(int k=1;k<=T;k++){vis.clear();memset(v,0,sizeof(v));memset(vv,0,sizeof(vv));printf("Case #%d:",k);scanf("%d%d%d",&len,&t,&n);for(int i=1;i<=n;i++){char c;scanf("%d %c",&v[i].pos,&c);if(c=='R')    v[i].turn=1;else v[i].turn=-1;v[i].id=i;vv[i]=v[i];}sort(v+1,v+1+n,cmp);sort(vv+1,vv+1+n,cmp);for(int i=1;i<=n;i++){if(vv[i].turn==-1)    vv[i].pos-=t;else if(vv[i].turn==1)    vv[i].pos+=t;if(vv[i].pos>len||vv[i].pos<0)    vv[i].turn=0;else vis[vv[i].pos]++;    }sort(vv+1,vv+1+n,cmp);for(int i=1;i<=n;i++){v[i].pos=vv[i].pos;v[i].turn=vv[i].turn;}sort(v+1,v+1+n,cmp1);for(int i=1;i<=n;i++){if(v[i].turn==0)    cout<<"Fell off"<<endl;else if(vis[v[i].pos]!=1)    cout<<v[i].pos<<" "<<"Turning"<<endl;else if(v[i].turn==1)    cout<<v[i].pos<<" "<<"R"<<endl;else cout<<v[i].pos<<" "<<"L"<<endl;}}
}

转载于:https://www.cnblogs.com/cangT-Tlan/p/7725913.html

cogs 1456. [UVa 10881,Piotr's Ants]蚂蚁相关推荐

  1. 思维题 UVA 10881 Piotr's Ants

    题目传送门 1 /* 2 题意:在坐标轴上一群蚂蚁向左或向右爬,问经过ts后,蚂蚁的位置和状态 3 思维题:本题的关键1:蚂蚁相撞看作是对穿过去,那么只要判断谁是谁就可以了 4 关键2:蚂蚁的相对位置 ...

  2. UVA 10881 Piotr‘s Ants

    题意: 一根长度为L的木棍上有n只蚂蚁,每只蚂蚁要么往左爬,要么往右爬,速度为1cm/s.当两只蚂蚁相遇时,二者同时掉头,爬到木棍顶端的蚂蚁掉下.给出每只蚂蚁的初始位置和朝向,计算t秒后每只蚂蚁的位置 ...

  3. UVa10881 Piotr's Ants【模拟】

    问题链接:UVa10881 Piotr's Ants. 问题简述: 一根长L厘米的木棍上有n只蚂蚁,已知每只蚂蚁有个开始的位置和爬行方向,速度为1.当两只蚂蚁相撞后,两者同时掉头继续爬行,求按输入顺序 ...

  4. UVA - 10881(思维题)------蚂蚁走竹竿

    题意:在这个题中.给了你竹竿的长度L,给了你蚂蚁的个数n,然后下边n行是每一只蚂蚁的初始位置.问你在T秒之后每一只蚂蚁的位置. 这个题给的时间是3000ms,如果一直要写模拟的话,有点烦人.其实,做这 ...

  5. UVA-10881 蚂蚁 Piotr's Ants

    题目大意:一根长L厘米的木棍上有n只蚂蚁,每只蚂蚁有个开始的位置和爬行方向,速度为1.当两只蚂蚁相撞后,两者同时掉头继续爬行,求按输入顺序给出每只蚂蚁T秒后的位置后朝向. /*蚂蚁相遇时可以理解为&q ...

  6. uva 10881蚂蚁(思维题)---理清关系

    题目大意:一根长度为L厘米的木棍上有n只蚂蚁每只蚂蚁要么朝左爬,要么朝右爬,速度为1厘米秒.当两只蚂蚁相撞时,二者同时掉头(掉头时间忽略不计).给出每只蚂蚁的初始位置和朝向,计算T秒之后每只蚂蚁的位置 ...

  7. UVa10881 Piotr's Ants

    题意:给出一个长为lcm的棍子,上面有n个蚂蚁,每个蚂蚁的速度为1cm/s,蚂蚁向左或者向右移动,当两个蚂蚁相遇时转向,问t秒后各自的位置 思路:因为蚂蚁速度一样,可以认为当蚂蚁相遇后,各自继续在移动 ...

  8. cogs 1430. [UVa 11300]分金币

    1430. [UVa 11300]分金币 ★☆   输入文件:Wealth.in   输出文件:Wealth.out   简单对比 时间限制:1 s   内存限制:256 MB [题目描述] 圆桌旁坐 ...

  9. UVA10881 Piotr‘s Ants

    #include <iostream> #include <cstdio> #include "bits/stdc++.h" #define ll long ...

最新文章

  1. Linux Kernel TCP/IP Stack — L1 Layer — tcpdump 抓包
  2. Macbook 无法找到Centos启动盘问题解决
  3. JVM 监控以及内存分析
  4. c语言24点游戏流程图,C语言解24点游戏程序
  5. .NET HttpGet 获取服务器文件下的图片信息 同步和异步方式处理
  6. springboot---集成mybits方法
  7. ajax 分页 评论刷新,评论:js无刷新分页(原创)
  8. (转)awk实例练习(二)
  9. RK3288 error: undefined reference to 'LOGD'
  10. java基础学习及总结
  11. 连接mysql_spring boot连接mysql提示The server time zone value xxx错误
  12. Eclipse ADT 进行android应用签名打包详解
  13. 用CDR(coreldraw)怎么把图片转为矢量图
  14. PyQt5--google快捷翻译
  15. java 开源发布系统_18个Java开源CMS系统一览
  16. 教你开发一个JS代码加密工具
  17. 简洁的表白java_java简短表白代码是什么
  18. java动态生成pdf 合并两个pdf文件功能三
  19. vulhub环境搭建
  20. 2019年‘泰迪杯’数据分析职业技能大赛A题——个人代码分享

热门文章

  1. org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter错误解决
  2. 手动整合ssh框架时的各种错误
  3. [翻译]RobotTurK: 灾难情况紧急视频系统
  4. 光用滴答清单也可以专注学习
  5. what should you do if you can be silent and do things
  6. 学生开始学术生涯的好方法
  7. 《技术的本质》2月24日part1
  8. 选择最大值的那条记录 sql
  9. 1970.1.1这个特殊时间
  10. laravel 在nginx服务器上除了首页其余都是404的问题