题解:AT_abc376_b [ABC376B] Hands on Ring (Easy)

· · 题解

观察到无论哪只手进行操作,有且仅有顺时针与逆时针两种走法。考虑另一只手的阻挡,可确定唯一路线。

具体解释见代码。

#include <bits/stdc++.h>
using namespace std;

int main(){

    int n,q,t,l=1,r=2,ans=0;//记录左右手位置和答案
    char h;
    cin>>n>>q;

    for(int i=1;i<=q;i++){

        cin>>h>>t;//读入

        if(h=='L'){
            int dl=min(l,t);//左手与终点序号较小者
            int dr=max(l,t);//左手与终点序号较大者
            if(dl<r && r<dr) ans+=n-abs(l-t);//顺时针被阻挡,按逆时针走
            else ans+=abs(l-t);//按顺时针走
            l=t;//更新左手位置
        }

        else{//右手思路基本相同
            int dl=min(r,t);
            int dr=max(r,t);
            if(dl<l && l<dr) ans+=n-abs(r-t);
            else ans+=abs(r-t);
            r=t;
        }
    }

    cout<<ans;//输出

    return 0;
}

//Terabyte's code.