UVa 10881 Piotr's Ants (等价变换)

题意:一个长度为L的木棍上有n个蚂蚁,每只蚂蚁要么向左,要么向右,速度为1,当两只蚂蚁相撞时,

它们同时掉头。给定每只蚂蚁初始位置和朝向,问T秒后,每只蚂蚁的状态。

析:刚看到这个题时,一点思路也没有,怎么做啊,难道又要模拟么,一想,模拟。。。天呐,好麻烦!

最终还是看了一下题解。真是很巧妙哪。

首先是当两个蚂蚁相撞时,转向和不转向是看不出来的。也就是说掉头等价于对穿而过。也就是说,

如果把蚂蚁看成是没有区别的小点,那么只要独立算每只蚂蚁的位置即可。虽然是这么说,但是,

对每只蚂蚁却不是这样,但是我们只要搞清楚了谁是谁了,就能搞定。

最重要的一点是,每只蚂蚁的相对顺序是不会变的,这才是核心。因此把所有目标位置从小到大排序,

刚从左到右的每个位置都是和初始状态下一样的。由于输入顺序不一定是按从左到右,所以需要预处理一下。

代码如下:

#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>

using namespace std;
typedef long long LL;
const int maxn = 10000 + 10;
struct node{
    int id, p, d;
    node(int i = 0, int pp = 0, int dd = 0) : id(i), p(pp), d(dd) { }
    bool operator < (const node &q) const {
        return p < q.p;
    }
};
node a[maxn], b[maxn];
int o[maxn];

int main(){
    int t, T, l, n, cases = 0;   cin >> T;
    while(T--){
        scanf("%d %d %d", &l, &t, &n);
        for(int i = 0; i < n; ++i){
            char  ch;
            scanf("%d %c", &a[i].p, &ch);
            a[i].id = i;
            a[i].d = (ch == ‘L‘ ? -1 : 1);//-1表示向左,1表示向右
            b[i] = node(0, a[i].p + t*a[i].d, a[i].d); //id是未知的
        }

        sort(a, a+n);//按照从左到右的顺序排列
        for(int i = 0; i < n; ++i)
            o[a[i].id] = i;//确定顺序数组
        sort(b, b+n);//计算最后状态

        printf("Case #%d:\n", ++cases);
        for(int i = 0; i < n; ++i){
            int d = o[i];//对应顺序
            if(b[d].p < 0 || b[d].p > l)  printf("Fell off\n");
            else if(b[d].p == b[d+1].p || b[d].p == b[d-1].p)  printf("%d Turning\n", b[d].p);
            else  printf("%d %c\n", b[d].p, b[d].d == 1 ? ‘R‘ : ‘L‘);
        }
        printf("\n");
    }
    return 0;
}

UVa 10881 Piotr's Ants (等价变换)

时间: 2024-12-21 22:00:29

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 (模拟)

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 (思维)

链接:http://acm.hust.edu.cn/vjudge/problem/25979分析:n只蚂蚁在爬,将n只蚂蚁距离木棍左端的距离从小到大排序后它们的相对顺序是不变的,因为碰到另一只蚂蚁两只蚂蚁就会掉头,蚂蚁就像一个弹珠来回弹,但整体上“掉头”等价于“对穿而过”,但题目要求输入时的顺序输出,所以并不是所有蚂蚁都是一样的,还要认清谁是谁,所以如果蚂蚁1初始状态为(3,R)两秒后在(5,R)的位置会出现一只蚂蚁但不一定是蚂蚁1,但是可以肯定(5,R)位置上的蚂蚁相对于其它蚂蚁的顺序和初始状

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