UVA10881蚂蚁
題意:
???? 在一個木棍上有只小螞蟻,他們的移動速度都是1,移動的時候如果和別的螞蟻碰面,那么碰面的這兩只小螞蟻會馬上掉頭繼續走,給你每只螞蟻的初始距離木棒左端點的距離和方向,以及木棍長度,問你t時間后每個螞蟻的狀態。
思路:
????? 比較有意思的題,其實對于這個題目,我們考慮下,如果所有的螞蟻都沒有區別,那么兩只螞蟻相遇是不是相當于"穿過去"了?那么有區別的時候呢?其實也可以考慮是直接穿過去了,只不過螞蟻的名字一直在變化而已,但無論怎么變,螞蟻的相對位置不會改變.所以我們可以對初始的螞蟻的位置進行排序<之前記得存上他們的id>,然后在把最終的位置處理出來,然后在排序,然后在一一對應給賦值回去,至于方向也是跟著最終位置一起賦值回去,具體細節看代碼。<我的代碼比較隨意,想看標準點的白書上應該有第一單元例5>.
?
#include<map>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 11000
using namespace std;
typedef struct
{
?? int x ,id ,fx;
}NODE;
typedef struct
{
?? int x ,fx;
}E;
NODE node[N];
E End[N] ,Ans[N];
map<int ,int>mark;
bool camp1(NODE a ,NODE b)
{
?? return a.x < b.x;
}
bool camp2(E a ,E b)
{
?? return a.x < b.x;????
}
int main()
{
??? int c ,cas = 1 ,t ,n ,l ,i;
??? char str[5];
??? scanf("%d" ,&c);
??? while(c--)
??? {
?????? scanf("%d %d %d" ,&l ,&t ,&n);
?????? for(i = 1 ;i <= n ;i ++)
?????? {
?????????? scanf("%d %s" ,&node[i].x ,str);
?????????? node[i].fx = str[0] == 'R' ? 1 : 0;
?????????? node[i].id = i;
?????? }
?????? sort(node + 1 ,node + n + 1 ,camp1);
?????? mark.clear();
?????? for(i = 1 ;i <= n ;i ++)
?????? {
????????? if(node[i].fx) End[i].x = node[i].x + t;
????????? else End[i].x = node[i].x - t;
????????? mark[End[i].x] ++;
????????? End[i].fx = node[i].fx;
?????? }
?????? sort(End + 1 ,End + n + 1 ,camp2);
?????? for(i = 1 ;i <= n ;i ++)
?????? Ans[node[i].id] = End[i];
?????? printf("Case #%d:\n" ,cas ++);
?????? for(i = 1 ;i <= n ;i ++)
?????? {
????????? if(Ans[i].x < 0 || Ans[i].x > l) puts("Fell off");
????????? else if(mark[Ans[i].x] > 1) printf("%d Turning\n" ,Ans[i].x);
????????? else printf("%d %c\n" ,Ans[i].x ,Ans[i].fx ? 'R' : 'L');
?????? }
?????? puts("");
??? }
??? return 0;
}
?
總結
以上是生活随笔為你收集整理的UVA10881蚂蚁的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Known Notation 39届亚洲
- 下一篇: UVA11292杀怪