Hust oj 1944 皮卡丘(同蚂蚁感冒)

皮卡丘
Time Limit: 1000 MSMemory Limit: 32768 K
Total Submit: 107(61 users)Total Accepted: 63(58 users)Rating: Special Judge: No
Description

一根长度为L米的桥上有n只可爱的皮卡丘,每只皮卡丘要么朝左走,要么朝右走,初始速度为1m/s。当两只皮卡丘相撞时,二者同时掉头。我们认为桥是独木桥很窄,窄到皮卡丘多宽桥多宽,相撞时2只皮卡丘处于相同的位置,且掉头不花费时间。给出每只皮卡丘的初始位置和朝向,计算T秒之后仍在桥上的皮卡丘们的位置。

Input

多组输入数据。

每组数据第一行为3个整数,L,T,n(0<L,T,n<=1000)。

以下n行每行描述一只皮卡丘的初始位置,其中,整数x(0<x<L)为皮卡丘距离桥的左端的距离,整数y为初始方向:1为往右,-1为往左。

Output

对于每组数据,输出一行,按从左到右的顺序输出T秒后仍在桥上的皮卡丘的位置,每2只皮卡丘之间用空格隔开(不计方向)。

Sample Input
10 1 4
1 1
5 1
3 -1
10 1
Sample Output
2 2 6
可以把碰到之后掉头看成穿过,和蚂蚁感冒那道经典题一样
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;

const int Maxn = 1005;
int L,T,n;
int x,y;
int a[Maxn];
int b[Maxn];

int main()
{
  while(~scanf("%d%d%d",&L,&T,&n))
  {
      for(int i=0;i<n;i++)
      {
          scanf("%d%d",&a[i],&y);
          if(y == 1)
            a[i] += T;
          else
            a[i] -= T;
      }
      sort(a,a+n);
      int index = 0;
      for(int i=0;i<n;i++)
      {
          if(a[i] > L) break;
          if(a[i] >= 0)
          {
            b[index++] = a[i];
          }
      }
      for(int i=0;i<index;i++)
      {
          printf("%d",b[i]);
          if(i != index-1)
            printf(" ");
      }
      printf("\n");
  }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值