UVA10881Piotr's Ants

感觉很巧妙的一道题 之前比赛做过一道题与这个类似 当时没想出来

很多蚂蚁在一条线上走 对撞之后改变方向 问T时间之后 蚂蚁分别在哪里 蚂蚁都是一样的 可以把蚂蚁看做一个点 对撞的时候 可以看做穿过 这样T之后哪些点有蚂蚁就知道了 就是不知道这个点的原点是哪个 可以把输入的点排序 因为相对顺序是不变的 就知道这个点原来是哪个了

不知道为嘛一直交不对 重新打了一遍 就A了

View Code
 1 #include <iostream>

 2 #include<cstdio>

 3 #include<cstring>

 4 #include<algorithm>

 5 #include<stdlib.h>

 6 

 7 using namespace std;

 8 struct node

 9 {

10     int id,p,d;

11 }before[10010],after[10010];

12 char dir[][100] = {"L","Turning","R"};

13 int order[10010];

14 bool cmp(node a,node b)

15 {

16     return a.p<b.p;

17 }

18 int main()

19 {

20     int i,j,k,n,m,ll,t;

21     char c;

22     cin>>m;

23     for(j = 1; j <= m ; j++)

24     {

25         cin>>ll>>t>>n;

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

27         {

28             cin>>k>>c;

29             int y = (c=='L'?-1:1);

30             before[i] = (node){i,k,y};

31             after[i] = (node){0,k+y*t,y};

32         }

33         sort(before,before+n,cmp);

34         sort(after,after+n,cmp);

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

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

37         order[before[i].id] = i;

38         for(i = 0 ; i < n-1 ; i++)

39         if(after[i].p==after[i+1].p)

40         after[i].d = after[i+1].d = 0;

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

42         {

43             int a = order[i];

44             if(after[a].p<0||after[a].p>ll)

45             puts("Fell off");

46             else

47             printf("%d %s\n",after[a].p,dir[after[a].d+1]);

48         }

49         puts("");

50     }

51     return 0;

52 }

 

你可能感兴趣的:(ant)