1 条题解

  • 0
    @ 2025-8-24 22:43:48

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Paris_Commune
    你的名字无人知晓,你的功绩永世长存。

    搬运于2025-08-24 22:43:48,当前版本为作者最后更新于2023-01-02 15:59:53,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    分析

    以样例 11 为例,在题面的解释中有这么一个图

    很明显 O(L)OO'(L)\sim O 的距离是 LOL\sim O 距离的两倍, O(R)OO'(R)\sim O 的距离也是 ROR\sim O 距离的两倍。那么设 (O(R))(L)O(O'(R))'(L)\sim O 的距离为 KK ,那么 $K=(O'(R))'(L)\sim L+L\sim O=O'(R)\sim =O+O'(L)\sim O=2\times (O\sim L+ O\sim R)$ 。

    同理,设(O(L))(R)O(O'(L))'(R)\sim O 的距离为 MM , M=2×(OR+OL)M=2\times (O\sim R+ O\sim L)

    这时再仔细看下图片,就可以找到其中的规律,我们设 LOL\sim O 的距离为 XX , ORO\sim R 的距离为 YY , 依靠上边的结论并观察可以得到下图:

    使用题目中的给定数据最终得到:当 kk 为偶数且输入字符为 L\tt L 时距离点 OO 的距离为 , (l+r)×(k1)+2×l(l+r)\times (k-1)+2\times l , 当 kk 为偶数且输入字符为 R\tt R 时距离点 OO 的距离为 , (l+r)×(k1)+2×r(l+r)\times (k-1)+2\times r ,当 kk 为奇数时距离点 OO 的距离为 (l+r)×k(l+r)\times k

    AC 代码

    #include <bits/stdc++.h>
    #define int long long
    using namespace std;
    int t,l,r;
    signed main(){
    	cin>>t>>l>>r;
    	while(t--){
    		int k;
    		char lr;
    		cin>>lr>>k;
    		if(lr=='L'){
    			if(k%2==1){
    				cout<<0-((l+r)*(k-1)+2*l)<<'\n';
    			}
    			else cout<<0-(l+r)*k<<'\n';
    		}
    		else{
    			if(k%2==1){
    				cout<<(l+r)*(k-1)+2*r<<'\n';
    			}
    			else cout<<(l+r)*k<<'\n';
    		}
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    7579
    时间
    1000ms
    内存
    128MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者