题解: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.