uva_10881_Piotr's Ants (模拟,Sort)
2013-04-09 15:23
393 查看
题意: 給出木條長度,螞蟻開始在木條的位置和其行走的方向,如果兩個螞蟻碰撞的時候,他們會反向走,求T秒後每個螞蟻的位置 分析: 這個題目如果模擬的話你會感到比較複雜,但是自己在紙上模擬機組之後,會發現,忽略螞蟻編號,最後結果螞蟻的方向與開始的時候螞蟻的方向一樣,相對順序都一樣,爲什麼,位置就是每個螞蟻開始位置順着開始方向不變的行走T秒之後的位置,會這樣呢?可以這麼想: 1.兩個螞蟻碰撞,反向可以看成穿越,不考慮個別的轉移,最終結果也就是螞蟻的最終狀態 2.對於兩個螞蟻碰撞,其最終的相對結果不變,A在B前面,假設A於B在t時刻相撞,之後A也固然在B前面 由於題目給出來的螞蟻不是按照初始位置排序的,所以定義一個終態,表示螞蟻i,T秒後會在位置tar_order[i]上 Code: #include <set> #include <map> #include <cmath> #include <ctime> #include <stack> #include <queue> #include <deque> #include <vector> #include <cstdio> #include <bitset> #include <cstdlib> #include <cstring> #include <algorithm> using namespace std; #define DIR 4 #define DIM 2 #define STATUS 2 #define MAXN 10000 + 10 #define MAXM 100000 + 10 #define oo (~0u)>>1 #define INF 0x3F3F3F3F #define LEFT 0 #define TURN 1 #define RIGHT 2 #define REPI(i, s, e) for(int i = s; i <= e; i ++) #define REPD(i, e, s) for(int i = e; i >= s; i --) static const double EPS = 1e-5; typedef struct Ant_ { int position, dir, idx; }Ant; Ant start[MAXN], end[MAXN]; int tar_order[MAXN]; //ith ant end order. char status[][10] = { "L", "Turning", "R" }; inline int cmp(const Ant &a, const Ant &b) { return a.position < b.position; } int main(int argc, char const *argv[]) { #ifndef ONLINE_JUDGE freopen("test.in", "r", stdin); #endif int l, n, t, cas; scanf("%d", &cas); REPI(k, 1, cas) { scanf("%d %d %d", &l, &t, &n); REPI(i, 1, n) { char ch[4]; start[i].idx = i; scanf("%d %s", &start[i].position, ch); if( 'L' == *ch ) { start[i].dir = end[i].dir = LEFT; end[i].position = start[i].position-t; } else if( 'R' == *ch ) { start[i].dir = end[i].dir = RIGHT; end[i].position = start[i].position+t; } } sort(start+1, start+1+n, cmp); REPI(i, 1, n) { tar_order[start[i].idx] = i; } sort(end+1, end+1+n, cmp); REPI(i, 1, n-1) { if( end[i].position == end[i+1].position ) { end[i].dir = end[i+1].dir = TURN; } } printf("Case #%d:\n", k); REPI(i, 1, n) { int d = tar_order[i]; if( end[d].position < 0 || end[d].position > l ) { printf("Fell off\n"); } else { printf("%d %s\n", end[d].position, status[end[d].dir]); } } printf("\n"); } return 0; }
相关文章推荐
- uva 10881 Piotr's Ants 模拟
- Uva 10881 Piotr's Ants (模拟+思维)
- uva 10881 Piotr's Ants (模拟)
- UVA - 10881 Piotr's Ants
- uva 10881 - Piotr's Ants (思维,3级)
- UVA 10881 Piotr's Ants
- UVA 10881 Piotr's Ants
- UVA - 10881 - Piotr's Ants
- 【巧妙的模拟】【UVA 10881】 - Piotr's Ants/Piotr的蚂蚁
- 例题5 UVA 10881 蚂蚁(Piotr's Ants)
- UVA 10881 Piotr's Ants
- UVa 10881 - Piotr's Ants
- uva10881 - Piotr's Ants (等效变换)
- uva - 10881 - Piotr's Ants(等效变换,排序)
- Piotr's ants UVA 10881
- UVA - 10881 Piotr's Ants 推理
- 蚂蚁-UVA 10881 - Piotr's Ants
- Uva-10881-Piotr's Ants
- UVa 10881 Piotr's Ants
- UVa 10881 Piotr's Ants (等价转化思想)