• cdoj1365 木杆上的蚂蚁


    Description

     

           在一根细木杆上,有一些速度相同蚂蚁,它们有的往左走,有的往右走,木杆很细,只允许一只蚂蚁通过,所以当两只蚂蚁碰头的时候,它们会掉头继续前进,直到走出边界,掉下木杆。
           已知木杆的长度和每只蚂蚁的名字、位置和初始方向,问依次掉下木杆的蚂蚁花费的时间以及它的名字。

    分析:

    对于杆上的蚂蚁,当两个蚂蚁碰头后,它们互换方向,但是我们仍然可以看成它们的方向没有改变,只是一只蚂蚁的路程让另外一只来走而已,所以对于每一只蚂蚁,如果不区分它们,那么它们的时间是可以求出来的,即它们所在的位置到终点的位移。由于每一只蚂蚁的相对位置没有改变,因此根据时间的先后和对应那只蚂蚁的方向,我们就知道了每只蚂蚁出队的顺序,仔细考虑下还是很简单的。

    代码:

    #include<iostream>
    #include<algorithm>
    #include<cmath>
    #include<stdlib.h>
    #include<stdio.h>
    #include<string.h>
    #include<queue>
    #include<deque>
    //#define DEBUG  //todo
    using namespace std;    int nn;
    struct node
    {
        char name[12];
        int loc;
        int dir;
        int s;
    }ar[110];
    int ans,T,N,L,s[110];
    deque<node> dq;
    
    bool cmp(node a,node b) { return a.loc<b.loc; }
    void ini()
    {
        cin>>T;
    }
    void work()
    {
        int ith=1;
        while(T--){
            dq.clear();
            char d;
            cin>>N>>L;
            for(int i=1;i<=N;i++) {
                getchar();
                scanf("%s %d %c",ar[i].name,&ar[i].loc,&d);
                if(d=='R') ar[i].dir=1;
                else ar[i].dir=-1;
                if(d=='R') ar[i].s=L-ar[i].loc;
                else ar[i].s=ar[i].loc;
                s[i]=ar[i].s;
            }
            sort(ar+1,ar+1+N,cmp);
            for(int i=1;i<=N;i++) dq.push_back(ar[i]);
            sort(s+1,s+1+N);
            printf("Case #%d:
    ",ith++);
            for(int i=1;i<=N;i++){
                printf("%d ",s[i]);
                for(int j=1;j<=N;j++)
                {
                    if(ar[j].s==s[i])
                    {
                        if(ar[j].dir==1) {
                            printf("%s
    ",dq.back().name);
                            dq.pop_back();
                            break;
                        }
                        else {
                            printf("%s
    ",dq.front().name);
                            dq.pop_front();
                            break;
                        }
                    }
                }
            }
        }
    }
    
    int main()
    {
        ini();
        work();
    #ifdef DEBUG
        cin>>nn;
    #endif
        return 0;
    }
  • 相关阅读:
    关于Git学习-远程库(github) 命令
    关于git的学习
    python-自动化测试结果发送邮件报错(smtplib.SMTPDataError: (554, b'DT:SPM 163……)解决方法
    android SDK- 使用 AVD Manager.exe 创建虚拟机遇到报错 emulator
    性能测试方案大纲-学习笔记
    python + locust 记录一次性能测试的实施
    jmeter 做压测常见问题记录-单台测试机建议最大线程数
    jmeter 调用mysql数据库,使用JDBC请求执行相关SQL
    加解密原理
    SM1,SM2,SM3,SM4刨析
  • 原文地址:https://www.cnblogs.com/au-xiaotian/p/3446449.html
Copyright © 2020-2023  润新知