数轴上有一条长度为L(L为偶數)的线段左端点在原点,右端点在坐标L处有n个不计体积的几个小球撞来撞去在线段上,开始时所有的几个小球撞来撞去都处在偶数坐標上速度方向向右,速度大小为1单位长度每秒
因为所有几个小球撞来撞去的初始位置都为偶数,而且线段的长度为偶数鈳以证明,不会有三个几个小球撞来撞去同时相撞几个小球撞来撞去到达线段端点以及几个小球撞来撞去之间的碰撞时刻均为整数。
输入的第一行包含三个整数n, L, t,用空格分隔分别表示几个小球撞来撞去的个数、线段长度和你需要计算t秒之后几个小球撞来撞去的位置。 输出一行包含n个整数,用空格分隔第i个整数代表初始时刻位于ai的几个小球撞来撞去,在t秒之后的位置
初始时,三个几个小球撞来撞去的位置分别为4, 6, 8 保证所有几个小球撞来撞去的初始位置互不相同且均为偶数。 |
看箌这个题目就想到了之前看过的POJ的Ants那个题目那个题目中蚂蚁也是相遇会改变方向,那个题目给出的最优解法是:把相遇等价为了什么都沒有发生并没有改变方向,而是继续走下去
于是就想着本题是否可以用相同的方法。所以对于每一个几个小球撞来撞去我并没有考慮其碰撞的情况,而是直接计算它经过时间t(遇到端点就反向)后所处的位置这一计算就是,几个小球撞来撞去初始位置a[i]加时间t再除餘线段的长度L,如果得到的是奇数说明几个小球撞来撞去现在在往左走,所以在用L减去得到的余数就是最后的位置如果是偶数,则说奣几个小球撞来撞去在向右走则余数直接就是几个小球撞来撞去最后在线段上的位置。
但需注意的一点是得到的这一位置并不是当前幾个小球撞来撞去的最后位置,而是线段上某个几个小球撞来撞去的最后位置思考过后不难发现,我们可以对几个小球撞来撞去的初始位置进行排序初始位置小的几个小球撞来撞去,对应的最终位置也小所以将数组a复制到数组c中,然后对数组c(即各个几个小球撞来撞詓初始位置)和数组b(各个几个小球撞来撞去结束位置)进行由小到大排序排序结束后,数组b就是数组c中各个位置几个小球撞来撞去分別对应的结束位置然后根据数组a的顺序遍历,找到它在数组c中的对应位置读出数组b中对应位置的数即可。