• UVA-10881 Piotr's Ants


         

    这道题以前在那见过,但是当时没做出来,今天有看到这道题感觉真的听巧妙的,嘿嘿嘿,如果不看是哪只蚂蚁,忽略碰撞之后转身这个条件,其实在这两种情况下最后蚂蚁的位置都是相同的,而要解决的问题就是确定在哪一个位置上究竟是哪只蚂蚁,每只蚂蚁的相对顺序是不变的(因为相撞之后转身,不能穿过),所以顺序的问题就解决了,啊,ACM真的是有趣!!!

    #include<algorithm>
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    
    using namespace std;
    const int N = 10000 + 5;
    struct ant{
        int id, p, d;
        bool operator < (const ant & x) const {
            return p < x.p;
        }
    }before[N],after[N];
    int L, n, t, order[N];
    const char* dir[3] = {"L", "Turning", "R"};  //这也不得不说很巧妙!
    
    void Solve_question(){
        static int Case = 0;
        sort(before, before + n);
        for(int i = 0; i < n; i++)
            order[before[i].id] = i;            //记录顺序
    
        sort(after, after + n);
        for(int i = 0; i < n - 1; i++)
            if(after[i].p == after[i + 1].p) after[i].d = after[i + 1].d = 0;
        printf("Case #%d:
    ",++Case);
        for(int i = 0; i < n; i++){
            int a = order[i];
            if(after[a].p < 0 || after[a].p > L) printf("Fell off
    ");
            else printf("%d %s
    ", after[a].p, dir[after[a].d+1]);
        }
        printf("
    ");
    }
    void Input_data(){
        int p, d;
        char c;
        scanf("%d %d %d", &L, &t, &n);
        for(int i = 0; i < n; i++){
            scanf("%d %c", &p, &c);
            d = (c == 'L'? -1 : 1);            // -1表示向左运动, 0表示正在转身, 1表示向右运动
            before[i] = (ant){i, p, d};
            after[i] = (ant){0, p + t * d, d};
        }
    }
    int main(){
        int T;
        scanf("%d", &T);
        while(T--){
            Input_data();
            Solve_question();
        }
    }
  • 相关阅读:
    201521123028 《Java程序设计》第5周学习总结
    Markdown格式
    201521123028《Java程序设计》第4周学习总结
    201521123028 《Java程序设计》第3周学习总结
    Spring07 JDBC
    Spring06 Aop
    Mystring05 配置文件之间的关系
    Mybatais 13 二级缓存
    Mybatais 14 注释的配置
    Mybatais 12 一级缓存
  • 原文地址:https://www.cnblogs.com/Pretty9/p/7384035.html
Copyright © 2020-2023  润新知