cogs 1456. [UVa 10881,Piotr's Ants]蚂蚁
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]蚂蚁相关推荐
- 思维题 UVA 10881 Piotr's Ants
题目传送门 1 /* 2 题意:在坐标轴上一群蚂蚁向左或向右爬,问经过ts后,蚂蚁的位置和状态 3 思维题:本题的关键1:蚂蚁相撞看作是对穿过去,那么只要判断谁是谁就可以了 4 关键2:蚂蚁的相对位置 ...
- UVA 10881 Piotr‘s Ants
题意: 一根长度为L的木棍上有n只蚂蚁,每只蚂蚁要么往左爬,要么往右爬,速度为1cm/s.当两只蚂蚁相遇时,二者同时掉头,爬到木棍顶端的蚂蚁掉下.给出每只蚂蚁的初始位置和朝向,计算t秒后每只蚂蚁的位置 ...
- UVa10881 Piotr's Ants【模拟】
问题链接:UVa10881 Piotr's Ants. 问题简述: 一根长L厘米的木棍上有n只蚂蚁,已知每只蚂蚁有个开始的位置和爬行方向,速度为1.当两只蚂蚁相撞后,两者同时掉头继续爬行,求按输入顺序 ...
- UVA - 10881(思维题)------蚂蚁走竹竿
题意:在这个题中.给了你竹竿的长度L,给了你蚂蚁的个数n,然后下边n行是每一只蚂蚁的初始位置.问你在T秒之后每一只蚂蚁的位置. 这个题给的时间是3000ms,如果一直要写模拟的话,有点烦人.其实,做这 ...
- UVA-10881 蚂蚁 Piotr's Ants
题目大意:一根长L厘米的木棍上有n只蚂蚁,每只蚂蚁有个开始的位置和爬行方向,速度为1.当两只蚂蚁相撞后,两者同时掉头继续爬行,求按输入顺序给出每只蚂蚁T秒后的位置后朝向. /*蚂蚁相遇时可以理解为&q ...
- uva 10881蚂蚁(思维题)---理清关系
题目大意:一根长度为L厘米的木棍上有n只蚂蚁每只蚂蚁要么朝左爬,要么朝右爬,速度为1厘米秒.当两只蚂蚁相撞时,二者同时掉头(掉头时间忽略不计).给出每只蚂蚁的初始位置和朝向,计算T秒之后每只蚂蚁的位置 ...
- UVa10881 Piotr's Ants
题意:给出一个长为lcm的棍子,上面有n个蚂蚁,每个蚂蚁的速度为1cm/s,蚂蚁向左或者向右移动,当两个蚂蚁相遇时转向,问t秒后各自的位置 思路:因为蚂蚁速度一样,可以认为当蚂蚁相遇后,各自继续在移动 ...
- cogs 1430. [UVa 11300]分金币
1430. [UVa 11300]分金币 ★☆ 输入文件:Wealth.in 输出文件:Wealth.out 简单对比 时间限制:1 s 内存限制:256 MB [题目描述] 圆桌旁坐 ...
- UVA10881 Piotr‘s Ants
#include <iostream> #include <cstdio> #include "bits/stdc++.h" #define ll long ...
最新文章
- Linux Kernel TCP/IP Stack — L1 Layer — tcpdump 抓包
- Macbook 无法找到Centos启动盘问题解决
- JVM 监控以及内存分析
- c语言24点游戏流程图,C语言解24点游戏程序
- .NET HttpGet 获取服务器文件下的图片信息 同步和异步方式处理
- springboot---集成mybits方法
- ajax 分页 评论刷新,评论:js无刷新分页(原创)
- (转)awk实例练习(二)
- RK3288 error: undefined reference to 'LOGD'
- java基础学习及总结
- 连接mysql_spring boot连接mysql提示The server time zone value xxx错误
- Eclipse ADT 进行android应用签名打包详解
- 用CDR(coreldraw)怎么把图片转为矢量图
- PyQt5--google快捷翻译
- java 开源发布系统_18个Java开源CMS系统一览
- 教你开发一个JS代码加密工具
- 简洁的表白java_java简短表白代码是什么
- java动态生成pdf 合并两个pdf文件功能三
- vulhub环境搭建
- 2019年‘泰迪杯’数据分析职业技能大赛A题——个人代码分享
热门文章
- org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter错误解决
- 手动整合ssh框架时的各种错误
- [翻译]RobotTurK: 灾难情况紧急视频系统
- 光用滴答清单也可以专注学习
- what should you do if you can be silent and do things
- 学生开始学术生涯的好方法
- 《技术的本质》2月24日part1
- 选择最大值的那条记录 sql
- 1970.1.1这个特殊时间
- laravel 在nginx服务器上除了首页其余都是404的问题