uva 10881 模拟题

来源:互联网 发布:2015年淘宝双十一交易额 编辑:程序博客网 时间:2024/06/05 19:05




题意:

给出一根L长的棒子,上面有n个蚂蚁,给出他们的走的方向和位置,问 t 时间后这些蚂蚁的位置

题解:

这里主要要理解蚂蚁相对位置不变,并且我们可以转化为,两个蚂蚁碰头后蚂蚁依然走自己的路,不会改变方向,只是交换了他们的序号而已

所以记录一下他们的初始位置,然后走自己的路后排一下序,相对位置还是和前面一样



#include<math.h>#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;#define MAXN 10005struct node{    int x,num;    char ch[10];};node a[MAXN];int order[MAXN];int cmp(node k1,node k2){    return k1.x<k2.x;}int main(){    int T;    int l,t,n;    int cases=1;    freopen("in.txt","r",stdin);    scanf("%d",&T);    while(T--)    {        scanf("%d%d%d",&l,&t,&n);        for(int i=1;i<=n;i++){            a[i].num=i;            scanf("%d%s",&a[i].x,a[i].ch);        }        sort(a+1,a+1+n,cmp);        for(int i=1;i<=n;i++)            order[a[i].num]=i;        for(int i=1;i<=n;i++)            if(a[i].ch[0]=='R')  a[i].x+=t;            else                 a[i].x-=t;        sort(a+1,a+1+n,cmp);        for(int i=1;i<n;i++){            if(a[i].x==a[i+1].x){                strcpy(a[i].ch,"Turning");                strcpy(a[i+1].ch,"Turning");            }        }        printf("Case #%d:\n",cases++);        for(int i=1;i<=n;i++){            if(a[order[i]].x>l||a[order[i]].x<0)                puts("Fell off");            else                printf("%d %s\n",a[order[i]].x,a[order[i]].ch);        }        puts("");    }    return 0;}


原创粉丝点击