UVA: 10881 派特的蚂蚁


注意:蚂蚁相撞后两者反方向移动相当于蚂蚁穿墙而过,所以不用判定撞击,在这种情况下,蚂蚁的相对位置不变,即一开始位于第一位的蚂蚁最后行走后还是第一位,因为蚂蚁之间不会越位,


#include <stdio.h>
#include <iostream>
#include <string>
#include <cmath>
#include <algorithm>
#define maxn 10005
using namespace std;
struct mmyi {
    int position;//位置
    string tou;//方向
    int order;//输入顺序
};mmyi a[maxn],c[maxn];
int l,t,m;

bool compare(mmyi a,mmyi b){//比较函数
    if(a.position<b.position)return true;
    else return false;
}
void go(){//走t步
    for(int i=0;i<m;i++){
        mmyi *b=&a[i];
        if(b->tou=="R"){
            b->position+=t;
        }else{
            b->position-=t;
        }
    }
}


int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
               cin>>l>>t>>m;
        for(int i=0;i<m;i++){
            cin>>a[i].position>>a[i].tou;
            a[i].order=i;
        }
        sort(a,a+m,compare);//按照位置排序
        int b[m];
        for(int i=0;i<m;i++){
            b[i]=a[i].order;//将终态时对应位置为哪个输入
        }
        go();
        sort(a,a+m,compare);//终态
        
        for(int i=0;i<m;i++){
            int aa=b[i];
            c[aa].position=a[i].position;//对应输入的终态保存在c数组中
            
            
           if(i<m-1)
            if(a[i].position==a[i+1].position)a[i].tou=a[i+1].tou="Turning";
if(a[i].position<0||a[i].position>l)a[i].tou="Fell off"; c[aa].tou=a[i].tou; } cout<<"Case #"<<i+1<<":"<<endl; for(int i=0;i<m;i++){ if(c[i].tou!="Fell off") cout<<c[i].position<<" "<<c[i].tou<<endl; else cout<<"Fell off"<<endl; } cout<<endl; } return 0;}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值