Hust oj 1944 皮卡丘(同蚂蚁感冒)
2016-09-15 20:24
211 查看
皮卡丘 | ||||||
| ||||||
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"); } } |