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

思路:因为蚂蚁速度一样,可以认为当蚂蚁相遇后,各自继续在移动,但是位置序列号有变化

代码如下:

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>using namespace std;class Ant
{
public:Ant() {}Ant(int seqno, int loc, int dir){this->seqno = seqno;this->loc = loc;this->dir = dir;}bool operator < (const Ant& other) const{return loc < other.loc;}
private:friend class PiotrsAnts;int seqno;int loc;int dir;
};class PiotrsAnts
{
public:char *p[3]{"L", "Turning","R"};void piotrsAnts(vector<Ant> ants, int l, int t){vector<Ant> afterAnts(ants.size());for (size_t i = 0; i < ants.size(); i++){afterAnts[i].seqno = 0;afterAnts[i].loc = ants[i].loc + t * ants[i].dir;afterAnts[i].dir = ants[i].dir;}sort(ants.begin(), ants.end());vector<int> order(ants.size());for (size_t i = 0; i < ants.size(); i++){order[ants[i].seqno] = i;}sort(afterAnts.begin(), afterAnts.end());for (size_t i = 0; i + 1 < afterAnts.size(); i++){if (afterAnts[i].loc == afterAnts[i + 1].loc){afterAnts[i].dir = afterAnts[i + 1].dir = 0;}}for (size_t i = 0; i < order.size(); i++){int seq = order[i];int loc = afterAnts[seq].loc;if (loc < 0 || loc > l){cout << "Fell off" << endl;}else{cout << loc << " " << p[afterAnts[seq].dir + 1] << endl;}}}
};int main()
{
#ifndef ONLINE_JUDGEifstream fin("f:\\OJ\\uva_in.txt");streambuf *old = cin.rdbuf(fin.rdbuf());
#endifint cas;cin >> cas;PiotrsAnts solver;for (int i = 0; i < cas; i++){int l, t, n;cin >> l >> t >> n;vector<Ant> ants;for (int j = 0; j < n; j++){int loc;string dir;cin >> loc >> dir;int d = (dir == "L" ? -1 : 1);Ant tmp(j, loc, d);ants.push_back(tmp);}cout << "Case #" << i + 1<< ":" << endl;solver.piotrsAnts(ants, l, t);cout << endl;} #ifndef ONLINE_JUDGEcin.rdbuf(old);
#endifreturn 0;
}

UVa10881 Piotr's Ants相关推荐

  1. UVa10881 Piotr's Ants【模拟】

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

  2. UVA10881 Piotr‘s Ants

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

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

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

  4. 思维题 UVA 10881 Piotr's Ants

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

  5. UVA-10881 蚂蚁 Piotr's Ants

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

  6. UVA 10881 Piotr‘s Ants

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

  7. ICPC程序设计题解书籍系列之二:刘汝佳:《算法竞赛入门经典训练指南》

    第1章 算法设计基础(例题) 1.1思维体操 UVA11292 HDU1902 POJ3646 The Dragon of Loowater[贪心] - 海岛Blog - CSDN博客 UVA1172 ...

  8. 《算法竞赛入门经典——训练指南》第一章相关内容

    #<算法竞赛入门经典--训练指南>第一章相关内容 希望各位大牛能指导! 红色为已经做了的...黄色背景是还有不懂地方,希望在年前能刷完第一章啊.... 更新版.google上貌似又加了ex ...

  9. 《题目与解读》红书 训练笔记目录《ACM国际大学生程序设计竞赛题目与解读》

    虽然2012年出版的老书了,但是是由三次世界冠军的上海交大ACM队出版的书籍,选择的题目是ACM经典中的经典,书中有非常详细的题解,可以学到很多东西,值得一刷. 目录 第一部分 第一章 数学 1.1 ...

最新文章

  1. 竖直菜单 html,jQuery实现的网页竖向菜单效果代码
  2. Placement new
  3. Dubbo架构的特点
  4. android 长按缩放拖动_十年Android之路面试2000人,面试准备+内部泄露核心题(中高级)...
  5. Scala集合:reduce(化简)方法使用示例
  6. 201110阶段二qt事件
  7. python库路径_如何设置本地python库目录/ PYTHONPATH?
  8. Android(1)—Mono For Android 环境搭建及破解
  9. 基于VisualC++2010开发Windows7杀毒应用程序范例(2)---检测并遍历所有进程的线程信息...
  10. Android开发笔记(一)手势识别
  11. STM32 LWIP实验第一章节--了解以太网
  12. MySQL日期时间函数总结
  13. 高速PCB电路板的信号完整性设计
  14. 射雕英雄传ol显示服务器断开,射雕英雄传OL6月18日维护更新内容
  15. 计算机3c认证 标准,计算机3C认证怎么办理,检测标准是什么?
  16. 关于Node.js中内存管理的思考与实践
  17. Win10中如何把语言栏缩到系统托盘
  18. Novell推出可替代微软的桌面应用软件包(转)
  19. conda创建的虚拟环境可以直接复制走放到另外一个电脑上用吗
  20. 一个多线程Ping 类

热门文章

  1. Substring with Concatenation of All Words
  2. poj3581Sequence(后缀数组)
  3. Agent admitted failure to sign using the key
  4. ubuntu下eclipse中键盘失灵
  5. 正则表达式过滤HTML危险脚本
  6. python第三方库有哪些常用的、请列举15个-不吹不擂,你想要的Python面试都在这里了【315+道题】...
  7. python创意小作品代码-Python学习,给自己的代码做个合集,定制自己的桌面软件!...
  8. 用python画漂亮图片-Python 竟能绘制如此酷炫的三维图
  9. python详细安装教程3.8-python3.8下载及安装步骤详解
  10. 零基础自学python教程-零基础5个月快速学会Python的秘诀