您的位置:首页 > 大数据 > 物联网

Uva 10881 Piotr’s Ants 蚂蚁

2013-07-22 14:15 260 查看
一根长度为 L 厘米的木棍上有 n 只蚂蚁,每只蚂蚁要么朝左爬,要么朝右爬,速度为 1 厘米/秒。当两只蚂蚁相撞时,二者同时调头(掉头用的时间忽略不计)。给出每只蚂蚁的初始位置和朝向,计算 T 秒之后每只蚂蚁的位置。

由于掉头用的时间可以忽略不计,所以可以直接看做两只蚂蚁对穿而过。于是可以很开心的直接把坐标按照方向进行加 / 减的处理。得到某只蚂蚁的最终坐标。

把棍子拉为无限长,然后通过模拟这个过程可以发现,蚂蚁的顺序是绝对的,最左边的蚂蚁绝不可能爬到其他蚂蚁的右边去。所以将最终坐标从小到大排序就能够得到这只蚂蚁最终的位置。当然,如果最终蚂蚁的位置坐标小于 0 或者大于 L 那么就直接判断为Fell off。

此外,从题目所给的数据可以看得出,蚂蚁并不是按照顺序输出的,因此用数组存下输入的顺序就OK了。

P.S : 注意每组数据之间有个空行。

附AC代码:

#include <stdio.h>


#include <math.h>


#include <iostream>


#include <cstdarg>


#include <algorithm>


#include <string.h>


#include <stdlib.h>


#include <string>


#include <list>


#include <vector>


#include <map>


#define LL long long


#define M(a) memset(a, 0, sizeof(a))


using namespace std;


 


void Clean(int count, ...)


{


va_list arg_ptr;


va_start (arg_ptr, count);


for (int i = 0; i < count; i++)


M(va_arg(arg_ptr, int*));


va_end(arg_ptr);


}


 


typedef struct Ant


{


int id, p, d;


bool operator < (const Ant& x) const


  {


return p < x . p;


   }


}Ant;


Ant now[10009], next[10009];


 


int tmp[10009];


 


int main()


{


int T;


scanf("%d", &T);


for (int cnt = 1; cnt <= T; cnt++)


  {


int l, t, n;


int p, d;


char c;


printf ("Case #%d:\n", cnt);


scanf("%d%d%d", &l, &t, &n);


for (int i = 0; i < n; i++)


 {


scanf("%d %c", &p, &c);


d = ((c == 'L') ? (-1) : (1));


             now[i] = (Ant){i, p, d};


             next[i] = (Ant){0, p + t * d, d};


  }


sort(now, now + n);


for (int i = 0; i < n; i++)


tmp[now[i] . id] = i;


sort(next, next + n);


for (int i = 0; i < n; i++)


if (next[i] . p == next[i + 1] . p)


next[i] . d = next[i + 1] . d = 0;


for (int i = 0; i < n; i++)


 {


int temp = tmp[i];


if(next[temp] . p < 0 || next[temp] . p > l)


puts("Fell off");


else


{


printf("%d ", next[temp] . p);


if (next[temp] . d == 0) puts("Turning");


    else puts((next[temp] . d == 1) ? ("R") : ("L"));


 }


  }


puts("");


   }


return 0;


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: