算法入门经典训练指南上的题。

这里有必要讲一下蚂蚁爬杆问题:每只蚂蚁都有一个初始方向,相撞会转向,关键就是相撞的处理,由于速度并不会改变,两只蚂蚁相撞,可以看做,两只蚂蚁穿过对方,继续沿原方向前进,经过t秒,最后蚂蚁的最终位置是固定的,但是对应位置的蚂蚁有可能不再是原来的蚂蚁;现在考虑经过t秒后蚂蚁的位置,假设蚂蚁刚开始以离杆的左端距离升序排序,那么t秒后,他们的位置排序不会改变,举例说明:如果以前有一只蚂蚁排在第二,t秒后它仍然在第二。

AC代码:

#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=10000+5;
struct node{
    int num;
    int pos;
    char dir;
}a[maxn],b[maxn];
bool cmp1(node &p1,node &p2){
    return p1.pos<p2.pos;
}
bool cmp2(node &p1,node &p2){
    return p1.num<p2.num;
}
int main(){
    int T,kase=1;
    scanf("%d",&T);
    while(T--){

        int len,t,n;
        scanf("%d%d%d",&len,&t,&n);
        int pos;
        char dir;
        for(int i=0;i<n;++i){
            scanf("%d %c",&a[i].pos,&a[i].dir);
            a[i].num=i;
            b[i].dir=a[i].dir;
            if(b[i].dir=='L') b[i].pos=a[i].pos-t;
            else b[i].pos=a[i].pos+t;
        }
        sort(b,b+n,cmp1);
        sort(a,a+n,cmp1);
        for(int i=0;i<n;++i){
            if((i<n-1&&b[i].pos==b[i+1].pos)||(i>0&&b[i].pos==b[i-1].pos)){
                a[i].pos=b[i].pos;
                a[i].dir='r';
            }
            else{
                 a[i].pos=b[i].pos;
                a[i].dir=b[i].dir;
            }
        }
        sort(a,a+n,cmp2);
        printf("Case #%d:\n",kase++);
        for(int i=0;i<n;++i){
            if(a[i].pos<0||a[i].pos>len) printf("Fell off\n");
            else if(a[i].dir=='r') printf("%d Turning\n",a[i].pos);
            else printf("%d %c\n",a[i].pos,a[i].dir);
        }
        printf("\n");
    }
    return 0;
}

如有不当之处欢迎指出!

蚂蚁爬杆问题 UVA 10881的更多相关文章

  1. 蚂蚁爬杆问题js实现

    运行效果 代码 <!DOCTYPE html> <html> <head> <title>蚂蚁爬杆实验</title> <script ...

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

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

  3. POJ 1852 Ants || UVA 10881 - Piotr's Ants 经典的蚂蚁问题

    两题很有趣挺经典的蚂蚁问题. 1.n只蚂蚁以1cm/s的速度在长为L的竿上爬行,当蚂蚁爬到竿子的端点就会掉落.当两只蚂蚁相撞时,只能各自反向爬回去.对于每只蚂蚁,给出距离左端的距离xi,但不知道它的朝 ...

  4. UVA.10881 Piotr's Ants (思维题)

    UVA.10881 Piotr's Ants (思维题) 题意分析 有一根长度为L cm的木棍,上有n只蚂蚁,蚂蚁要么向左爬,要么向右,速度均为1cm/s,若2只蚂蚁相撞,则蚂蚁同时调头.求解第T秒时 ...

  5. 思维题 UVA 10881 Piotr's Ants

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

  6. 【UVa 10881】Piotr's Ants

    Piotr's Ants Porsition:Uva 10881 白书P9 中文改编题:[T^T][FJUT]第二届新生赛真S题地震了 "One thing is for certain: ...

  7. LightOJ 1323 Billiard Balls(找规律(蚂蚁爬木棍))

    题目链接:https://vjudge.net/contest/28079#problem/M 题目大意: 一个边界长为L宽为W的平面同时发射n个台球,运动K秒,台球碰到桌面及两(多)个台球相撞情况如 ...

  8. [ACM_模拟] UVA 10881 Piotr's Ants[蚂蚁移动 数组映射 排序技巧]

    "One thing is for certain: there is no stopping them;the ants will soon be here. And I, for one ...

  9. Uva 10881 Piotr’s Ants 蚂蚁

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

随机推荐

  1. Maven以及在Maven在Myeclipse中的配置

    一.maven安装与配置1.到官网http://maven.apache.org/download.cgi下载maven压缩包,解压到指定文件夹.如:D:\apache-maven-3.3.92.添加 ...

  2. Oracle Sqlload 导入数据

    sqlload导入数据具有快,简单,无需校验等方便,多说无益 1 首先,oracle数据库要有这么个表,用来接收数据.我这里这个uuid是序列生成的,当然也可以sqlload导入时候分配uuid -- ...

  3. Android studio修改包名

    最后一步,需要手动修改工程 build.gradle文件中的applicationId改为跟你的包名一致即可,

  4. android在一个应用程序员启动另一个程序

    一般我们知道了另一个应用的包名和MainActivity的名字之后便可以直接通过如下代码来启动: Intent intent = new Intent(Intent.ACTION_MAIN); int ...

  5. cobbler自动化安装系统

    笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 在很久很久以前,使用kickstart实现自动化安装的时候,我一直认为装系统是多么高大上的活,直到cobbler的 ...

  6. javascript:将URL的参数列表解析为一个对象

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  7. python并发编程之多进程(实现)

    一.multipricessing模块的介绍 python中的多线程无法利用多核优势,如果想要充分的使用多核CPU资源,在python中大部分情况下需要用多线程,python提供了multiproce ...

  8. Html5五子棋

    1.效果图 2.代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> ...

  9. 自己收集的工作js库---2018-02-07

    今年工作进度到这里结束,整理一下今年收集的自用js库,后期会更新,代码已贴github=>https://github.com/lpg-kobe/personal-github /** * @p ...

  10. windows下cmd常用

    windows下cmd常用 shutdown -s -t 2------2秒后关机 加上-f选项意思是强制执行 shutdown -r -t 2------2秒后重启 加上-f选项意思是强制执行 lo ...