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:\n",inq);
        for(int i=1;i<=n;i++){
            if(is[i]==3){
                printf("%d Turning\n",getss[i]);
            }
            else if(is[i]==2){
                printf("Fell off\n");
            }
            else{
                printf("%d %c\n",getss[i],(is[i])?'R':'L');
            }
        }
        printf("\n");
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/dreagonm/p/10674844.html