T1 蚂蚁移动
(move.cpp/c)
【问题描述】
有一根尺子,长度L<=200000,在上面有N(N <= 70000,N < L)只蚂蚁,且没有两只蚂蚁初始位置相同。每只蚂蚁有一个初始方向(左或者右),且它们会爬行,速度都是每秒一个长度单位。当它们碰到另外一个蚂蚁或者尺子的边缘时,它们会立即改变移动的方向(即反向)。
给定尺子的长度,蚂蚁的只数,以及所有蚂蚁初始的位置和方向。要你求第T秒时每只蚂蚁的位置(1<=T<=1000000)。【输入格式】
第一行两个整数L和T。
第二行一个整数N,表示蚂蚁的只数。 接下来的每行由两部分组成。第一部分是一个整数,表示该蚂蚁的初始位置。第二部分是一个字母,表示初始方向:D表示向右,L表示向左。两部分中间空格。【输出格式】
N个整数,表示每只蚂蚁的最终位置。无需按照蚂蚁的原先编号输出,只要按照最终位置坐标递增(非降)的顺序输出坐标即可。
【样例输入】
5 5
2 2 D 4 L【样例输出】1 3
两只蚂蚁相碰等于穿过,就完了
code:
1 #include2 #include 3 #include 4 #include 5 using namespace std; 6 int a[80000],tot; 7 int main() { 8 int L,T; 9 cin>>L>>T;10 int n;11 cin>>n; 12 T%=2*L;13 for(int i=1; i<=n; i++) {14 int pos;15 char d;16 cin>>pos>>d;17 if(d=='L') {18 a[++tot]=abs(pos-T);19 if(a[tot]>L)a[tot]-=2*(a[tot]-L);20 } else {21 a[++tot]=pos+T;22 if(a[tot]>L)a[tot]-=2*(a[tot]-L);23 if(a[tot]<0)a[tot]=-a[tot];24 }25 }26 sort(a+1,a+tot+1);27 for(int i=1;i<=tot;i++)cout< <<" ";28 return 0;29 }
over