Uva---10881 Piotr's Ants(蚂蚁)

Problem D
Piotr‘s Ants
Time Limit: 2 seconds

"One thing is for certain: there is no stopping them;
the ants will soon be here. And I, for one, welcome our
new insect overlords."

Kent Brockman

Piotr likes playing with ants. He has n of them on a horizontal pole L cm long. Each ant is facing either left or right and walks at a constant speed of 1 cm/s. When two ants bump into each other, they both turn around (instantaneously) and start walking in opposite directions. Piotr knows where each of the ants starts and which direction it is facing and wants to calculate where the ants will end up T seconds from now.

Input
The first line of input gives the number of cases, NN test cases follow. Each one starts with a line containing 3 integers: L , T and n (0 <= n <= 10000). The next n lines give the locations of the n ants (measured in cm from the left end of the pole) and the direction they are facing (L or R).

Output
For each test case, output one line containing "Case #x:" followed by n lines describing the locations and directions of the n ants in the same format and order as in the input. If two or more ants are at the same location, print "Turning" instead of "L" or "R" for their direction. If an ant falls off the pole before Tseconds, print "Fell off" for that ant. Print an empty line after each test case.

Sample Input Sample Output
2
10 1 4
1 R
5 R
3 L
10 R
10 2 3
4 R
5 L
8 R
Case #1:
2 Turning
6 R
2 Turning
Fell off

Case #2:
3 L
6 R
10 R


Problemsetter: Igor Naverniouk
Alternate solutions: Frank Pok Man Chu and Yury Kholondyrev

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cstdlib>
 5 #include<algorithm>
 6 #include<vector>
 7 using namespace std;
 8 const int maxn=10005;
 9 struct ants
10 {
11   int id ; //输入序号
12   int pos ;  //在小木棍上的顺序
13   int status ;  //状态
14   bool operator <( const ants an) const
15   {
16     return pos<an.pos;
17   }
18 }begin[maxn],end[maxn];
19
20 int order[maxn];
21
22 int main()
23 {
24     int test;
25     int T,L,n;
26     char str;
27     int a;
28     scanf("%d",&test);
29     for(int k=1;k<=test;k++)
30     {
31      printf("Case #%d:\n",k);
32         scanf("%d%d%d",&L,&T,&n);
33      for(int j=0;j<n;j++)
34      {
35        scanf("%d %c",&a,&str);
36        int value=(str==‘L‘)?-1:1;
37        begin[k]=(ants){j,a,value};
38        end[k]=(ants){0,a+T*value,value};
39      }
40      sort(begin,begin+n);
41      for(int i=0;i<n;i++)
42        order[begin[i].id]=i;
43      sort(end,end+n);
44      for(int i=0;i<n-1;i++)
45       if(end[i].pos==end[i+1].pos)
46         end[i].status=end[i+1].status=0;
47      char chastr[][10]={"L","Turning","R"};
48        for(int i=0;i<n;i++){
49         int a=order[i];
50         if(end[a].pos<0||end[a].pos>L)
51           printf("Fell off\n");
52         else
53           printf("%d %s\n",end[a].pos,chastr[end[a].status+1]);
54        }
55        printf("\n");
56     }
57    return 0;
58 }

Uva---10881 Piotr's Ants(蚂蚁)

时间: 2024-10-23 22:17:08

Uva---10881 Piotr's Ants(蚂蚁)的相关文章

uva 10881 Piotr&#39;s Ants 解题报告

题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=20&page=show_problem&problem=1822 题目意思:有一条 L 厘米长的杆,上面有 n 只蚂蚁,给出每只蚂蚁的朝向以及离杆上最左端的距离,问 T 秒之后每只蚂蚁到达的位置,如果 T 秒后某个位置有多只蚂蚁同时到达,那么这堆蚂蚁处于的位置 + Turning,如果超过这条杆的长度,输出F

UVa 10881 Piotr&#39;s Ants (等价变换)

题意:一个长度为L的木棍上有n个蚂蚁,每只蚂蚁要么向左,要么向右,速度为1,当两只蚂蚁相撞时, 它们同时掉头.给定每只蚂蚁初始位置和朝向,问T秒后,每只蚂蚁的状态. 析:刚看到这个题时,一点思路也没有,怎么做啊,难道又要模拟么,一想,模拟...天呐,好麻烦! 最终还是看了一下题解.真是很巧妙哪. 首先是当两个蚂蚁相撞时,转向和不转向是看不出来的.也就是说掉头等价于对穿而过.也就是说, 如果把蚂蚁看成是没有区别的小点,那么只要独立算每只蚂蚁的位置即可.虽然是这么说,但是, 对每只蚂蚁却不是这样,但

uva 10881 Piotr&#39;s Ants (模拟)

uva 10881 Piotr's Ants "One thing is for certain: there is no stopping them; the ants will soon be here. And I, for one, welcome our new insect overlords."Kent Brockman Piotr likes playing with ants. He has n of them on a horizontal pole L cm lo

UVA 10881 - Piotr&#39;s Ants【模拟+思维】

题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1822 题意:有很多只蚂蚁在一条直线上,每个蚂蚁移动速度都是1,并且有一个初始方向.并且当相邻两个蚂蚁相撞时转向.现在问t时间后各个蚂蚁的位置. 解法:这题的一个致命技巧就是把两只蚂蚁的相撞看作是两只蚂蚁交换穿过对方并且交换蚂蚁的编号.这个是很好理解的,类似于物理的完全弹性碰撞.又由

UVA 10881 Piotr&#39;s Ants(模拟)

题目链接:https://vjudge.net/problem/UVA-10881 其实这道题的关键只有一句话: 当两个蚂蚁因碰撞而掉头的时候,我们完全可以认为是两个点对穿而过. 这时候我们的主要任务就是弄清楚“谁是谁”. 然而很明显每只蚂蚁的相对顺序是不变的,所以我们要记录一个$order$数组. 预处理出它的初始状态和order,同时算出走之后的状态. 注意程序中的有些地方处理的很巧妙. AC代码: 1 #include<cstdio> 2 #include<iostream>

【UVA】10881-Piotr&#39;s Ants

记得之前做过一个类似的,这里的话蚂蚁碰见掉头和碰见穿过去起始本质上都是一样的,只不过相撞之后蚂蚁对应的ID换了. 有了思路就很好模拟了. 14058049 10881 Piotr's Ants Accepted C++ 0.052 2014-08-18 03:53:00 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<vector>

【UVa 10881】Piotr&#39;s Ants

Piotr's Ants Porsition:Uva 10881 白书P9 中文改编题:[T^T][FJUT]第二届新生赛真S题地震了 "One thing is for certain: there is no stopping them;the ants will soon be here. And I, for one, welcome our new insect overlords."Kent Brockman Piotr likes playing with ants. H

UVA10881 Piotr&#39;s Ants

Piotr's AntsTime Limit: 2 seconds "One thing is for certain: there is no stopping them;the ants will soon be here. And I, for one, welcome ournew insect overlords." Kent Brockman Piotr likes playing with ants. He has n of them on a horizontalpol

UVA-10881 - Piotr&#39;s Ants

Piotr's Ants Time Limit: 2 seconds "One thing is for certain: there is no stopping them; the ants will soon be here. And I, for one, welcome our new insect overlords." Kent Brockman Piotr likes playing with ants. He has n of them on a horizontal