• 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;
    }
    
  • 相关阅读:
    POJ 2503 Babelfish
    POJ 1182 食物链
    POJ 2352 Stars
    POJ 2528 Mayor's posters
    POJ 1328 Radar Installation
    POJ 1017 Packets
    jQuery实现登录提示
    【1-5】jQuery对象和DOM对象
    【1-4】jQuery代码风格-导航栏
    【3】买苹果
  • 原文地址:https://www.cnblogs.com/dreagonm/p/10674844.html
Copyright © 2020-2023  润新知