P8925 「GMOI R1-T2」Light

(文章目录)


前言

为啥要在OI比赛中出物理捏。


题目大意

通道可以认为是一个无限长的坐标轴,在原点 OO 上有一盏灯,在坐标为 L-LRR 的地方分别有两面镜子。
求这盏灯左边或右边第 xx 个像的坐标。

对于 100%100\% 的数据 1T5×1051\le T\le 5\times 10^51L,R1071\le L,R \le 10^71x10101\le x \le 10^{10}


思路

通过初步的画图,我们好像可以总结出这样的规律:xa+xbxa+xb 就是答案。但是,我们发现这样的话对于左右两盏灯的位置好像是没有使用的,这感觉不太对。

之后经过检查,发现写错了。

最后是:

xx 为偶数,答案为 xa+xbxa+xb
xx 为奇数:

当求左边的答案时为 ((x+1)l+(x1)r-((x+1)*l+(x-1)*r
求右边时为 (x1)l+(x+1)r(x-1)*l+(x+1)*r


代码

#include <iostream>
using namespace std;
typedef long long ll;
ll T,l,r,x;
int main(){
    cin>>T;
    cin>>l>>r;
    for (int i = 1; i <=T ; ++i) {
        char op;
        cin>>op;
        scanf("%lld",&x);
        if(op=='L'){
            if(x%2==1){
                printf("%lld\n",-((x+1)*l+(x-1)*r));
                continue;
            }
            printf("%lld\n",-(x*l+x*r));
        }else{
            if(x%2==1){
                printf("%lld\n",((x+1)*r+(x-1)*l));
                continue;
            }
            printf("%lld\n",(x*l+x*r));
        }
    }
    return 0;
}

总结

本题的难点在于不出错的模拟一遍样例和几个小一点的 xx,同时对数据进行归纳。