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;
    }
    
  • 相关阅读:
    轻量级通用上采样算子-CARAFE
    图像分割-Mask Scoring R-CNN
    对C#Chart控件使用整理
    C#中的三种timer
    C#的三大难点
    将Excel的数据导入DataGridView中(转)
    状态者设计模式
    C# 中 DataTable 使用详解。
    Excel连接字符串在.NET中的应用
    状态机设计思想
  • 原文地址:https://www.cnblogs.com/dreagonm/p/10674844.html
Copyright © 2011-2022 走看看