zoukankan      html  css  js  c++  java
  • UVA10881 Piotr's Ants

    思路

    发现蚂蚁之间的相对位置不变
    所以计算出最后的位置,再把编号分配进去即可
    注意掉下去的条件是pos<0

    代码

    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    int N,n,L,T,pos[10100],to[10100],num[10100],is[10100],getss[10100],inq;
    struct Node{
        int pos,to,id;
    }a[10100];
    bool cmp2(Node a,Node b){
        return a.pos<b.pos;
    }
    int main(){
        scanf("%d",&N);
        while(N--){
            inq++;
            memset(is,0,sizeof(is));
            scanf("%d %d %d",&L,&T,&n);
            for(int i=1;i<=n;i++){
                scanf("%d",&pos[i]);
                a[i].pos=pos[i];
                char c=getchar();
                while(c!='L'&&c!='R')
                    c=getchar();
                num[i]=i;
                if(c=='L')
                    to[i]=0;
                else        
                    to[i]=1;
                a[i].to=to[i];
                a[i].id=i;
            }
            sort(a+1,a+n+1,cmp2);
            for(int i=1;i<=n;i++)
                pos[i]=a[i].pos,to[i]=a[i].to,num[i]=a[i].id;
            for(int i=1;i<=n;i++){
                if(to[i]==0)
                    for(int j=i-1;j>=1;j--){
                        if(to[j]==1&&pos[j]+T>=pos[i]-T)
                            swap(num[i],num[j]);
                    }
            }
            for(int i=1;i<=n;i++)
                if(to[i]==0){
                    pos[i]-=T;
                }
                else{
                    pos[i]+=T;
                }
            for(int i=1;i<=n;i++)
                for(int j=1;j<=n;j++)
                    if(i!=j)
                        if(pos[i]==pos[j])
                            is[num[i]]=3;
            for(int i=1;i<=n;i++){
                if(pos[i]<0||pos[i]>L)
                    is[num[i]]=2;
                else{
                    if(is[num[i]]!=3)
                        is[num[i]]=to[i];
                    getss[num[i]]=pos[i];
                }
            }
            printf("Case #%d:
    ",inq);
            for(int i=1;i<=n;i++){
                if(is[i]==3){
                    printf("%d Turning
    ",getss[i]);
                }
                else if(is[i]==2){
                    printf("Fell off
    ");
                }
                else{
                    printf("%d %c
    ",getss[i],(is[i])?'R':'L');
                }
            }
            printf("
    ");
        }
        return 0;
    }
    
  • 相关阅读:
    centos通过yum安装php
    CentOS6 用yum安装mysql详解,简单实用
    启用CentOS6.5 64位安装时自带的MySQL数据库服务器
    Python三方库:Pandas(数据分析)
    Python三方库:Numpy(数组处理)
    Java笔记:反射,注解
    Java笔记:多线程
    Java笔记:IO流
    Java笔记:集合
    Java笔记:数组,异常,泛型
  • 原文地址:https://www.cnblogs.com/dreagonm/p/10674844.html
Copyright © 2011-2022 走看看