题意:在这个题中。给了你竹竿的长度L,给了你蚂蚁的个数n,然后下边n行是每一只蚂蚁的初始位置。问你在T秒之后每一只蚂蚁的位置。

这个题给的时间是3000ms,如果一直要写模拟的话,有点烦人。其实,做这道题的时候,我们可以参考挑战书上的一道Ants题。当两只蚂蚁碰撞之后,我们可以将它看为互穿而过,只不过是要改变位置标记。其实,在这道题中,我们可以发现,蚂蚁在同时间是同时进行运动的。那么,它们的相对位置是不会发生改变的。那么,我们就可以对它进行排序。然后记录它的位置。

接下来举几个列子 让大家深刻了解一下

10 2 4
1 R
5 R
3 L
10 R|__*__|__*__|__*__|__|__|__|__*               //将已有位置进行了星号标记
0  1  2  3  4  5  6  7  8  9  10->   <-     ->             ->我们可以有上图得到 在2秒之后的具体分布情况|__*__|__*__|__|__|__*__|__|__|    ....第4只蚂蚁掉下              //将到达位置进行了星号标记
0  1  2  3  4  5  6  7  8  9  10<-   ->           ->         我们可以看到,在1 3 走了一秒之后,它们发生了碰撞。使得1和3掉头继续行走。其实,我们可以换一种思路。当1和3发生碰撞时,我们可以将其视为互穿而过。此时,我们只需交换1和3的位置标记在上边这个例子中(没有开始走之前),我们按照位置排序之后它的id编号变为  0 2 1 3那么,我们就可以用一个order数组来记录变换之后的蚂蚁的位置。进而通过变换后的数组来输出每个蚂蚁的位置。                 

可能字面意思说的不太清楚。大家可以看下边的代码。进行理解。(主要理解它的相对位置不会发生改变。然后用一个order来记录位置)。

代码:

#include<set>
#include<map>
#include<stack>
#include<bitset>
#include<math.h>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define pi acos(-1)
#define close ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
using namespace std;
typedef long long ll;
const int MAX_N=1000000+50;
const int INF=0x3f3f3f3f;
const double EPS = 1e-10;
ll mod = 1e9+7;struct ant{int id;int pow;int dir;bool operator < (const ant &a)const{return pow<a.pow;}//结构体内部定义排序
}before[MAX_N],after[MAX_N];int order[MAX_N];  //之前的位置记录
char Rlt[][10] = {"L","Turning","R","Fell off"};
int main(){int t;scanf("%d",&t);int L,T,n,k = 1;while(t--){printf("Case #%d:\n",k++);scanf("%d%d%d",&L,&T,&n);int pow;char c;for(int i = 0; i < n ; i++){scanf("%d %c",&pow,&c);int dir = (c == 'L'?-1:1);before[i] = (ant){i,pow,dir};  after[i] = (ant){0,pow + T * dir,dir};}sort(before,before+n);sort(after,after+n);for(int i = 0; i < n; i++){order[before[i].id] = i;}for(int i = 0; i < n - 1; i++){if(after[i].pow == after[i+1].pow) after[i].dir = after[i+1].dir = 0;}for(int i = 0; i < n; i++){int a = order[i];if(after[a].pow < 0 || after[a].pow > L) printf("%s\n",Rlt[3]);else printf("%d %s\n",after[a].pow,Rlt[after[a].dir + 1]);}printf("\n");}return 0;
}/*********************####....#.#..###.....##....###.......######              ###            ###...........               #...#          #...###*#######                 #.#.#          #.#.#####*******######             #.#.#          #.#.#...#***.****.*###....          #...#          #...#....**********##.....           ###            ###....****    *****....####        ##########        ######
##############################################################
#...#......#.##...#......#.##...#......#.##------------------#
###########################################------------------#
#..#....#....##..#....#....##..#....#....#####################
##########################################    #----------#
#.....#......##.....#......##.....#......#    #----------#
##########################################    #----------#
#.#..#....#..##.#..#....#..##.#..#....#..#    #----------#
##########################################    ############
*/

UVA - 10881(思维题)------蚂蚁走竹竿相关推荐

  1. 小思维题-蚂蚁感冒——蓝桥杯

    [蚂蚁感冒](https://www.acwing.com/problem/content/description/1213/) Description 长100厘米的细长直杆子上有n只蚂蚁.它们的头 ...

  2. 思维题 UVA 10881 Piotr's Ants

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

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

    1456. [UVa 10881,Piotr's Ants]蚂蚁 ★   输入文件:Ants.in   输出文件:Ants.out   简单对比 时间限制:1 s   内存限制:128 MB [题目描 ...

  4. 贪心/思维题 UVA 11292 The Dragon of Loowater

    题目传送门 1 /* 2 题意:n个头,m个士兵,问能否砍掉n个头 3 贪心/思维题:两个数组升序排序,用最弱的士兵砍掉当前的头 4 */ 5 #include <cstdio> 6 #i ...

  5. yoyo思维题(困难) 组合数学

    问题 B: yoyo思维题(困难) 时间限制: 1 Sec  内存限制: 256 MB 提交: 11  解决: 3 [提交][状态][讨论版][命题人:qianyouyou][Edit] [TestD ...

  6. codeforces 有意思的思维题 1 ~ 15

    codeforces 思维题 1.给定数组,求满足i < j and ai * aj = i + j的数对数量 2.第 i 步向前跳 i 步或后退 1 步 3.给两个点,求正方形的另两个点 4. ...

  7. I.Gree的心房(思维题)

    一开始我读到这道题以为要用dfs结果,读完之后发现好像就是一个思维题: 分析: 首先应该知道因为题目说了,一个人只能走四个方向(up,down,left,right):所以从左上角到右下角,那么就是都 ...

  8. little w and Soda(思维题)

    链接:https://ac.nowcoder.com/acm/contest/297/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  9. ZOJ 3829 贪心 思维题

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3829 现场做这道题的时候,感觉是思维题.自己智商不够.不敢搞,想着队友智商 ...

最新文章

  1. 二十六、二叉树--查找指定节点
  2. SAP WM 自动创建TO单的JOB运行报错 - Enter the storage unit type - 对策
  3. 漫话:如何给女朋友解释为什么双11无法修改收货地址?
  4. 20080826 - Delphi 2009 来了
  5. Bapi-BAPI_GOODSMVT_CREATE【该物料不可能有库存记帐】
  6. python上的数据库sqlite3——插入多行数据
  7. 【转】Java:String、StringBuffer和StringBuilder的区别
  8. C++ 泛型编程(一):模板基础:函数模板、类模板、模板推演成函数的机制、模板实例化、模板匹配规则
  9. hdfs文件如何导出到服务器,[Hadoop] 如何将 HDFS 文件导出到 Windows文件系统
  10. 阿里敏捷教练何勉:论精益思想及精益产品开发实践体系
  11. 调用高德逆地理接口_地理编码与逆地理编码
  12. 在线CSV转YAML工具
  13. Facebook提高工作效率的秘密 ,值得收藏
  14. 虚拟机克隆后没有IP
  15. 【协同任务】基于matlab蚁群算法多组群UAV协同任务路径规划【含Matlab源码 1578期】
  16. linux命令怎么查看日志文件,linux查看日志文件命令
  17. 机器学习之决策树、随机森林
  18. EDGE网络已落户嘉兴
  19. 康奈尔笔记法写程序笔记
  20. contiki学习笔记(四)、contiki系统UDP通信原理(单播、多播、RPL介绍)

热门文章

  1. 数千万,打水漂了。。
  2. Mac下关闭8080端口的应用
  3. bzoj 1001狼抓兔子
  4. antd去掉表格边框
  5. RGB-T 开源数据集资源汇总
  6. 总结本人学习b站黑马前端课程,各部分案例汇总
  7. JAVA微信小程序图书馆座位预约小程序系统毕业设计 开题报告
  8. 大厂卡你的学历,究竟是为了什么?,android开发视频硬编码
  9. 华为nova3游戏帧数测试软件,中端机游戏体验测试,OPPO K1与华为nova 3谁更胜一筹?...
  10. 亚马逊站内deal申请条件你都知道?