UVa --- 10881 Piotr's Ants 【思维】
2017-08-23 10:05
302 查看
传送门
//题意:给出一根长度为L的木棒上n只蚂蚁的初始坐标和运动方向, 速度是1cm/s,问T秒后每只蚂蚁的所在位置的情况和运动方向, 如果两只蚂蚁在运动中碰头了, 则这两只蚂蚁立刻掉头(不计时间), T秒后如果蚂蚁掉下木棒输出”Fell off”, 正在掉头输出”Turning”.
//这道题就很考思维了, 其实我们可以发现对于有一只蚂蚁起始为(1,R), 那么两秒后一定在(3,R) 出有一只蚂蚁, 如果没有碰头那么那只蚂蚁就是原先那只, 否则就是与这只蚂蚁碰了头的某只蚂蚁. ( 即把蚂蚁的碰头看作是对穿而过. 不会碰头 )
所以对于广泛一点的情况,
起始 : (1,R),(3,L),(8,L)
2秒后一定会有: (3,R), (1,L), (6,L).
到此我们可以发现, 其实前后两种情况的蚂蚁的相对位置没有变化, 即对前后两种情况按位置排完序之后, 对应的关系是一一对应的. 那么就比较好做了.
注意一点就是, 由于输入的顺序时任意的, 所以我们需要把之前的位置关系记下来. 并且处理下掉头的情况.
AC Code
//题意:给出一根长度为L的木棒上n只蚂蚁的初始坐标和运动方向, 速度是1cm/s,问T秒后每只蚂蚁的所在位置的情况和运动方向, 如果两只蚂蚁在运动中碰头了, 则这两只蚂蚁立刻掉头(不计时间), T秒后如果蚂蚁掉下木棒输出”Fell off”, 正在掉头输出”Turning”.
//这道题就很考思维了, 其实我们可以发现对于有一只蚂蚁起始为(1,R), 那么两秒后一定在(3,R) 出有一只蚂蚁, 如果没有碰头那么那只蚂蚁就是原先那只, 否则就是与这只蚂蚁碰了头的某只蚂蚁. ( 即把蚂蚁的碰头看作是对穿而过. 不会碰头 )
所以对于广泛一点的情况,
起始 : (1,R),(3,L),(8,L)
2秒后一定会有: (3,R), (1,L), (6,L).
到此我们可以发现, 其实前后两种情况的蚂蚁的相对位置没有变化, 即对前后两种情况按位置排完序之后, 对应的关系是一一对应的. 那么就比较好做了.
注意一点就是, 由于输入的顺序时任意的, 所以我们需要把之前的位置关系记下来. 并且处理下掉头的情况.
AC Code
/** @Cain*/ const int maxn=1e4+5; int order[maxn]; int cas=1; char *dirname[] = {"L","Turning","R"}; struct node { int pos,id,dir; //-1代表左, 0 表示正在掉头, 1 表示右 bool operator < (const node& a) const { return pos > a.pos; } }before[maxn],after[maxn]; void solve() { int L,T,n; scanf("%d%d%d",&L,&T,&n); for(int i=1;i<=n;i++){ int x; char s[10] = {0}; scanf("%d%s",&x,s); int d = s[0] == 'L'?-1:1; before[i] = (node){x,i,d}; after[i] = (node){x+T*d,0,d}; //编号不确定 } sort(before+1,before+n+1); sort(after+1,after+1+n); for(int i=1;i<=n;i++){ order[before[i].id] = i ; } for(int i=1;i<n;i++){ if(after[i].pos == after[i+1].pos ) after[i].dir = after[i+1].dir = 0; } printf("Case #%d:\n", cas++); for(int i=1;i<=n;i++){ int now = order[i]; if(after[now].pos < 0 || after[now].pos > L) printf("Fell off\n"); else printf("%d %s\n",after[now].pos,dirname[after[now].dir+1]); } printf("\n"); }
相关文章推荐
- 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 (模拟+思维)
- 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
- 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
- UVA - 10881 Piotr's Ants
- UVA 10881 Piotr's Ants
- 例题5 UVA 10881 蚂蚁(Piotr's Ants)