题目大意
原点 O 上有一盏灯,在坐标为 −L 和 R 的地方分别有两面镜子,这两面镜子上呈现无穷个灯的像。请你求出这盏灯左边或右边第 x 个像的坐标。
解题思路
CSDN
我们按照题意将示意图(上图)画出。
然后可以发现,$O$ 点左侧的像按顺序排序依次是:
。
$O$ 点右侧的像按顺序排序依次是:
。
于是总结规律(还是比较好总结的):
左侧第 x 盏灯的坐标是:
x 为奇数是:坐标为 。
x 为偶数是:坐标为 。
右侧第 盏灯的坐标是:
x 为奇数是:坐标为$。
x 为偶数是:坐标为。
于是对于每一次询问,都可以利用规律 O(1) 算出答案。 总时间复杂度 O(T)
代码
为了避免同学直接复制,只显示核心代码(上面应该讲清楚了,所以没有注释)。
if(x%2==0 && c=='L')
{
ans=x*(L+R);
write(-ans);
putchar('\n');
}
else if(x%2==0 && c=='R')
{
ans=x*(L+R);
write(ans);
putchar('\n');
}
else if(x%2==1 && c=='L')
{
ans=(x+1)*L+(x-1)*R;
write(-ans);
putchar('\n');
}
else if(x%2==1 && c=='R')
{
ans=(x+1)*R+(x-1)*L;
write(ans);
putchar('\n');
}